検索

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 and the Future:新しいテクノロジーへの適応c#.net and the Future:新しいテクノロジーへの適応Apr 14, 2025 am 12:06 AM

C#と.NETは、継続的な更新と最適化を通じて、新しいテクノロジーのニーズに適応します。 1)C#9.0および.NET5は、レコードタイプとパフォーマンスの最適化を導入します。 2).Netcoreは、クラウドネイティブおよびコンテナ化されたサポートを強化します。 3)ASP.Netcoreは、最新のWebテクノロジーと統合されています。 4)ML.NETは、機械学習と人工知能をサポートしています。 5)非同期プログラミングとベストプラクティスはパフォーマンスを改善します。

c#.netはあなたにぴったりですか?その適用性の評価c#.netはあなたにぴったりですか?その適用性の評価Apr 13, 2025 am 12:03 AM

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NET内のC#コード:プログラミングプロセスの調査.NET内のC#コード:プログラミングプロセスの調査Apr 12, 2025 am 12:02 AM

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#.NET:コアの概念とプログラミングの基礎を探るC#.NET:コアの概念とプログラミングの基礎を探るApr 10, 2025 am 09:32 AM

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

テストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストテストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストApr 09, 2025 am 12:04 AM

C#.NETアプリケーションのテスト戦略には、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。 1.単位テストにより、コードの最小ユニットがMSTEST、ヌニット、またはXUNITフレームワークを使用して独立して動作することを保証します。 2。統合テストでは、一般的に使用されるシミュレートされたデータと外部サービスを組み合わせた複数のユニットの機能を検証します。 3.エンドツーエンドのテストでは、ユーザーの完全な操作プロセスをシミュレートし、通常、セレンは自動テストに使用されます。

高度なC#.NETチュートリアル:次のシニア開発者インタビューをエース高度なC#.NETチュートリアル:次のシニア開発者インタビューをエースApr 08, 2025 am 12:06 AM

C#シニア開発者とのインタビューでは、非同期プログラミング、LINQ、.NETフレームワークの内部作業原則などのコア知識をマスターする必要があります。 1.非同期プログラミングは、非同期を通じて操作を簡素化し、アプリケーションの応答性を向上させるのを待ちます。 2.LinqはSQLスタイルでデータを操作し、パフォーマンスに注意を払います。 3.ネットフレームワークのCLRはメモリを管理し、ガベージコレクションに注意して使用する必要があります。

c#.netインタビューの質問と回答:専門知識を高めるc#.netインタビューの質問と回答:専門知識を高めるApr 07, 2025 am 12:01 AM

C#.NETインタビューの質問と回答には、基本的な知識、コアの概念、高度な使用が含まれます。 1)基本知識:C#は、Microsoftが開発したオブジェクト指向言語であり、主に.NETフレームワークで使用されています。 2)コアの概念:委任とイベントは動的な結合方法を可能にし、LINQは強力なクエリ関数を提供します。 3)高度な使用:非同期プログラミングは応答性を向上させ、式ツリーは動的コード構造に使用されます。

C#.NETを使用したマイクロサービスの構築:建築家向けの実用的なガイドC#.NETを使用したマイクロサービスの構築:建築家向けの実用的なガイドApr 06, 2025 am 12:08 AM

C#.NETは、その強力なエコシステムと豊富なサポートのため、マイクロサービスを構築するために人気のある選択肢です。 1)asp.netcoreを使用してRestfulapiを作成して、順序の作成とクエリを処理します。 2)GRPCを使用して、マイクロサービス間の効率的な通信を実現し、注文サービスを定義および実装します。 3)Dockerコンテナ化されたマイクロサービスを介して展開と管理を簡素化します。

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

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

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)