検索

C# の正規表現の概要

Nov 23, 2019 pm 05:15 PM
c#正規表現

この記事では、C# 正規表現のメタキャラクタについて整理します。正規表現は、文字で構成される式です。各文字はルールを表します。式内の文字は、通常の文字とメタキャラクタの 2 種類に分類されます。通常の文字は、文字通りの意味が変更されず、テキストと完全に一致する文字を指しますが、メタ文字は特別な意味を持ち、文字の種類を表します。

C# の正規表現の概要

テキストを文字のストリームとして扱い、各文字を所定の位置に配置します。たとえば、正規表現「Room\d\d\d」、最初の 4 つは、 Room という文字は通常の文字で、次の文字 \ はエスケープ文字です。次の文字 d とともにメタキャラクタ \d を形成します。これは、その位置に任意の数値があることを意味します。

正規表現の言語で説明: 正規表現「Room\d\d\d」は合計 7 文字をキャプチャします。これは、「Room で始まり、終わる」ことを意味します。 with 3 桁で終わる文字列の一種。この種類の文字列をパターン (パターン) と呼び、通常のパターンとも呼ばれます。

1. エスケープ文字

エスケープ文字は \ で、通常の文字を特別な意味を持つメタ文字にエスケープします。 :

  • \t: 水平タブ文字
  • \v: 垂直タブ文字
  • \ r: キャリッジ リターン
  • \n: ライン フィード
  • \\: 文字 \ を表します。つまり、エスケープします。エスケープ文字 \ を通常の文字 \
  • \": は文字" に変換します。C# では、文字列を定義するために二重引用符が使用されます。文字列に含まれる二重引用符には \" が使用されます。第 2 に、文字クラス

は、入力テキストをシーケンシャル文字ストリーム内の文字クラス メタ文字として扱います。マッチ キャラクタとキャプチャ キャラクタ。いわゆるキャプチャ キャラクタは、1 つのメタキャラクタによってキャプチャされた文字が他のメタキャラクタによって照合されず、後続のメタキャラクタは残りのメタキャラクタからのみ照合できることを意味します。テキスト内で再度照合します。 一般的に使用される文字クラスのメタ文字:

[char_group]

: 文字グループ内の任意の文字と一致します

  • [^char_group]:文字グループを除く任意の文字に一致
  • [first-last]: 最初から最後までの文字範囲に一致 任意の文字 (文字範囲には最初と最後が含まれます)
  • .: ワイルドカード。\n
  • \w# を除く任意の文字に一致します。 ##: 任意の単語文字に一致します。通常、単語文字は A ~ Z、a ~ z、0 ~ 9 を指します。
  • \W
  • : A-Z を除く、単語以外の文字と一致します。 、a-z、0-9 以外の文字
  • \s
  • : 任意の空白文字と一致します
  • \S
  • : 空白以外の任意の文字と一致します。 文字
  • \d
  • : 任意の数字と一致します。
  • \D
  • : 数値以外の文字と一致します
  • 注、エスケープ文字は文字クラスのメタ文字にも属しており、通常の一致を実行するときに文字もキャプチャされます。 ## 三、ロケータ
  • ロケータ マッチング (またはキャプチャ) の対象は位置であり、文字の位置に基づいてパターン マッチングが成功したかどうかを判断します。文字で幅がゼロです (幅は 0)。一般的に使用されるロケーターは次のとおりです:

^: デフォルトでは、文字列の先頭に一致します。複数行モードでは、各行の先頭と一致します; $

: デフォルトでは、文字列の終了位置、または文字列の末尾の \n より前の位置と一致します; 複数行の場合モードでは、各行の末尾より前の位置、または各行の末尾の \n より前の位置と一致します。

    \A
  • : 文字列の開始位置と一致します;
  • \Z
  • : 文字列の終了位置、または \n と一致します。文字列の終わり 前の位置;
  • \z
  • : 文字列の終了位置と一致します;
  • \G
  • : 文字列の終了位置と一致します前の一致;
  • \b
  • : 単語の先頭または末尾と一致;
  • \B
  • : 単語の中間位置と一致;
  • 4. 量指定子、欲張りと怠惰
量指定子とは、次の出現回数を制限することを指します。以前の規則的なパターン. 量指定子は次の 2 つのモードに分けられます: 貪欲モードと遅延モード. 貪欲モードはできるだけ多くの文字に一致することを意味し、遅延モードはできるだけ少ない文字に一致することを意味します。デフォルトでは、量指定子は貪欲モードになっています。遅延モードを有効にするには、量指定子の後に ? を追加します。

  • *: 0 回以上発生
  • : 1 回以上発生
  • ? : 0 回または 1 回出現します
  • {n}: n 回出現します
  • {n,}: n 回以上出現します
  • {n,m}: n ~ m 回出現します

複数出現するということは、先行するメタキャラクターが複数回出現することを意味することに注意してください (例: \d {2})は \d\d​​ と同等ですが、2 つの数値が表示され、2 つの数値が同じである必要はない点が異なります。同じ 2 つの数値を表すには、グループ化を使用する必要があります。

5. 文字のグループ化とキャプチャ

() 括弧は式の範囲を決定するだけではありません、ただし、グループを作成するには、() 内の式がグループであり、参照グループは、2 つのグループに一致するテキストがまったく同じであることを意味します。グループ化を定義するための基本的な構文:

(pattern)

このタイプのグループ化では文字がキャプチャされます。いわゆるキャプチャ文字とは、 to: a 要素characters によってキャプチャされた文字は、他のメタキャラクターとは照合されず、後続のメタキャラクターは残りのテキストからのみ再照合できます。

1、グループ番号と名前

デフォルトでは、各グループにはグループ番号が自動的に割り当てられます。ルールは次のとおりです: 左括弧に従って、左から右へグループのグループ 出現順に番号が付けられ、最初のグループのグループ番号は 1、2 番目のグループのグループ番号は 2 になります。グループの名前を指定することもできます。このグループは名前付きグループと呼ばれます。名前付きグループにも自動的に番号が付けられます。番号は 1 から始まり、1 つずつ増加します。グループの名前を指定する構文は次のとおりです。 :

(? <em>名前</em> <code>> パターン)

## 一般に、グループは名前付きグループと番号付きグループに分けられます。グループを参照する方法は次のとおりです:

    グループ名でグループを参照:\k
  • グループ番号によるグループの参照:\ 番号
グループは逆方向にのみ参照できることに注意してください。つまり、正規表現テキストの左側から開始して、グループを次のように指定する必要があります。後で参照できるようになる前に定義されます。

正規表現でグループを参照するための構文は「\number」です。たとえば、「\1」はグループ 1 に一致する部分文字列を表し、「\2」はグループ 2 に一致する文字列を表します。 。

たとえば、「.*?\1>」は、グループを参照する場合、

valid

に一致します。グループは全く同じです。

2、グループ化コンストラクター

グループ化の構築方法は次のとおりです。

  • (パターン): キャプチャ一致する部分式を取得し、グループ番号をグループに割り当てます
  • #(? pattern): 一致する部分式を名前付きグループにキャプチャします
  • # (?:パターン): 非キャプチャ グループ化、グループ番号がグループに割り当てられていない
  • (?> パターン): 貪欲なグループ化
  • 3, 貪欲なグループ化

貪欲なグループ化は、非バックトラッキング グループとも呼ばれます。このグループ化により、バックトラッキングが無効になります。正規表現エンジンは、入力テキスト内の可能な限り多くの文字と一致します。キャラクター。これ以上一致できない場合、追加のパターン一致を試みるために後戻りすることはできません。

(?> パターン )

4、2 つのうち 1 つを選択します

|

|

は、左側と右側の式を 2 つの部分に分割していることに注意してください。 <pre class="brush:php;toolbar:false">pattern1 | pattern2</pre> 6、ゼロ幅アサーション

ゼロ幅は幅が 0 であり、一致は位置であることを意味します。 substring will はマッチング結果に現れず、アサーションは判定結果を指し、アサーションが true の場合にのみマッチングが成功したとみなします。

ロケーターの場合、文の先頭と末尾 (^ $) または単語の先頭と末尾 (\b) を照合できます。これらのメタ文字は 1 つの位置のみに照合し、この位置が指定されることを指定します。したがって、特定の文字と一致するのではなく、特定の条件を満足することは、

ゼロ幅アサーション

と呼ばれます。いわゆるゼロ幅とは、どの文字にも一致しないが位置に一致することを意味します。いわゆるアサーションは判断を指し、正規表現はアサーションが true の場合にのみ一致し続けます。ゼロ幅アサーションは、単に文や単語を指定するのではなく、正確な位置と一致させることができます。

正規表現では、テキストを左から右への文字の流れとして扱います。右への移動は後方 (後ろを見る) と呼ばれ、左への移動は前方 (先を見る) と呼ばれます。正規表現の場合、指定されたパターン (Pattern) に一致する場合にのみ、アサーションが True (肯定的な式と呼ばれます) となり、一致しないパターンが True (否定的な式と呼ばれます) になります。

マッチングの方向とマッチングの質的性質に応じて、ゼロ幅アサーションは 4 つのタイプに分類されます。
  • (?= pattern):前向、肯定断言
  • (?! pattern):前向、否定断言
  • (? pattern<code>):后向、肯定断言
  • (? pattern<code>):后向、否定断言

 1,前向肯定断言

前向肯定断言定义一个模式必须存在于文本的末尾(或右侧),但是该模式匹配的子串不会出现在匹配的结果中,前向断言通常出现在正则表达式的右侧,表示文本的右侧必须满足特定的模式:

 (?= subexpression )

使用前向肯定断言可以定一个模糊匹配,后缀必须包含特定的字符:

\b\w+(?=\sis\b)

对正则表达式进行分析:

  • \b:表示单词的边界
  •  \w+:表示单词至少出现一次
  • (?=\sis\b):前向肯定断言,\s 表示一个空白字符, is 是普通字符,完全匹配,\b 是单词的边界。

从分析中,可以得出,匹配该正则表达式的文本中必须包含 is 单词,is是一个单独的单词,不是某一个单词的一个部分。举个例子

Sunday is a weekend day 匹配该正则,匹配的值是Sunday,而The island has beautiful birds 不匹配该正则。

2,后向肯定断言

后向肯定断言定义一个模式必须存在于文本的开始(或左侧),但是该模式匹配的子串不会出现在匹配的结果中,后向断言通常出现在正则表达式的左侧,表示文本的左侧必须满足特定的模式:

(?<p>使用后向肯定断言可以定一个模糊匹配,前缀必须包含特定的字符:</p><pre class="brush:php;toolbar:false">(?<p>对正则表达式进行分析:</p>
  • (?:后向断言,\b表示单词的开始,20是普通字符
  • \d{2}:表示两个数字,数字不要求相同
  • \b:单词的边界

该正则表达式匹配的文本具备的模式是:文本以20开头、以两个数字结尾。

推荐学习:C#.Net教程

以上がC# の正規表現の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はcnblogsで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
C#.NETで開発:実用的なガイドと例C#.NETで開発:実用的なガイドと例May 12, 2025 am 12:16 AM

C#と.NETは、強力な機能と効率的な開発環境を提供します。 1)C#は、CのパワーとJavaのシンプルさを組み合わせた最新のオブジェクト指向プログラミング言語です。 2).NETフレームワークは、複数のプログラミング言語をサポートするアプリケーションを構築および実行するためのプラットフォームです。 3)C#のクラスとオブジェクトは、オブジェクト指向プログラミングの中核です。クラスはデータと動作を定義し、オブジェクトはクラスのインスタンスです。 4).NETのゴミ収集メカニズムは、開発者の作業を簡素化するためにメモリを自動的に管理します。 5)C#および.NETは、同期および非同期プログラミングをサポートする強力なファイル操作関数を提供します。 6)一般的なエラーは、デバッガー、ロギング、例外処理を通じて解決できます。 7)パフォーマンスの最適化とベストプラクティスには、StringBuildの使用が含まれます

C#.NET:Microsoft .NETフレームワークの理解C#.NET:Microsoft .NETフレームワークの理解May 11, 2025 am 12:17 AM

.NetFrameworkは、一貫したプログラミングモデルと強力なランタイム環境を提供する、クロス言語のクロスプラットフォーム開発プラットフォームです。 1)メモリとスレッドを管理するCLRとFCLで構成され、FCLは事前に構築された機能を提供します。 2)使用の例には、読み取りファイルとLINQクエリが含まれます。 3)一般的なエラーには、未処理の例外とメモリリークが含まれ、デバッグツールを使用して解決する必要があります。 4)パフォーマンスの最適化は、非同期プログラミングとキャッシュを通じて実現でき、コードの読みやすさと保守性を維持することが重要です。

c#.netの寿命:その永続的な人気の理由c#.netの寿命:その永続的な人気の理由May 10, 2025 am 12:12 AM

C#.NETが永続的に魅力的なままである理由には、その優れたパフォーマンス、リッチエコシステム、強力なコミュニティサポート、クロスプラットフォーム開発機能が含まれます。 1)優れたパフォーマンスであり、エンタープライズレベルのアプリケーションとゲーム開発に適しています。 2).NETフレームワークは、さまざまな開発分野をサポートするための幅広いクラスライブラリとツールを提供します。 3)アクティブな開発者コミュニティと豊富な学習リソースがあります。 4).NetCoreは、クロスプラットフォーム開発を実現し、アプリケーションシナリオを拡張します。

マスターC#.NETデザインパターン:シングルトンから依存関係への注入までマスターC#.NETデザインパターン:シングルトンから依存関係への注入までMay 09, 2025 am 12:15 AM

C#.NETの設計パターンには、Singletonパターンと依存関係の注入が含まれます。 1.シングルトンモードは、クラスに1つのインスタンスしかないことを保証します。これは、グローバルアクセスポイントが必要なシナリオに適していますが、安全性と虐待の問題をスレッドすることに注意する必要があります。 2。依存関係の噴射により、依存関係を注入することにより、コードの柔軟性とテスト可能性が向上します。多くの場合、コンストラクターの注入に使用されますが、複雑さを高めるために過度の使用を避ける必要があります。

C#.NET現代世界:アプリケーションと産業C#.NET現代世界:アプリケーションと産業May 08, 2025 am 12:08 AM

C#.NETは、ゲーム開発、金融サービス、モノのインターネット、クラウドコンピューティングの分野で現代世界で広く使用されています。 1)ゲーム開発では、C#を使用してUnityエンジンを介してプログラムします。 2)金融サービスの分野では、C#.NETが高性能取引システムとデータ分析ツールの開発に使用されます。 3)IoTおよびクラウドコンピューティングに関して、C#.NETはAzure Servicesを通じてサポートを提供して、デバイス制御ロジックとデータ処理を開発します。

C#.NETフレームワークvs.Net Core/5/6:違いは何ですか?C#.NETフレームワークvs.Net Core/5/6:違いは何ですか?May 07, 2025 am 12:06 AM

.NETFRAMEWORKISWINDOWS-CENTRIC、while.netcore/5/6supportscross-platformdevelopment.1).netframework、2002年以来、isidealforwindowsprimitedincross-platformcapabilities.2).netcore、andtseverutions(andtseverutions(andtseverution)

C#.NET開発者のコ​​ミュニティ:リソースとサポートC#.NET開発者のコ​​ミュニティ:リソースとサポートMay 06, 2025 am 12:11 AM

C#.NET開発者コミュニティは、次のような豊富なリソースとサポートを提供します。1。Microsoftの公式文書、2。StackoverflowやRedditなどのコミュニティフォーラム、3。Githubのオープンソースプロジェクト。これらのリソースは、開発者が基本的な学習から高度なアプリケーションまでプログラミングスキルを向上させるのに役立ちます。

C#.NETアドバンテージ:機能、利点、およびユースケースC#.NETアドバンテージ:機能、利点、およびユースケースMay 05, 2025 am 12:01 AM

C#.NETの利点には以下が含まれます。1)非同期プログラミングなどの言語機能により、開発が簡素化されます。 2)パフォーマンスと信頼性、JITコンピレーションとゴミ収集メカニズムによる効率の向上。 3)クロスプラットフォームサポート、.NetCoreはアプリケーションシナリオを拡張します。 4)Webからデスクトップ、ゲーム開発までの優れたパフォーマンスを備えた幅広い実用的なアプリケーション。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター