2

ご挨拶。

私は、正規表現を含むアプリケーションの一部をデバッグするという任務を負っていますが、これまで正規表現を扱ったことはありません。2つの質問:

1)正規表現は、2つの文字列が同等であるかどうかをテストすることになっていることを知っていますが、以下の2つの正規表現ステートメントは、平易な英語で具体的に何を意味しますか?

2)正規表現についてもっと知ることができるウェブサイト/ソースに関する推奨事項はありますか?(できればC#で)

if (Regex.IsMatch(testString, @"^(\s*?)(" + tag + @")(\s*?),", RegexOptions.IgnoreCase))
                {
                    result = true;
                }
else if (Regex.IsMatch(testString, @",(\s*?)(" + tag + @")(\s*?),", RegexOptions.IgnoreCase))
                {
                    result = true;
                }
4

14 に答える 14

5

に何が含まれているかを知らなければ、その正規表現が何を意味するのかを判断するのは難しいでしょうtag。実際、正規表現が壊れているように見えます(または、少なくとも、入力を適切にエスケープしていません)。

大まかに言えば、最初の正規表現については:

  • 文字列の^先頭で一致すると言います。
  • キャプチャグループを設定します(この(...)例では明らかに使用されていませんが、使用可能です)。
  • 任意の\s空白文字(スペース、タブなど)に一致します
  • 前の*?文字(この場合は空白)の0個以上に一致し、疑問符があるため、残りの式を機能させるために必要な最小文字数に一致します。
  • (" + tag + @")内容をtag正規表現に挿入します。私が言ったように、それは逃げることなく危険です。
  • (\s*?)以前と同じ一致(空白文字の最小数)
  • ,末尾のコンマに一致します。

2番目の正規表現は非常に似ていますが、(文字列の先頭ではなく)開始コンマを探します。

私は正規表現のPythonドキュメントが好きですが、このサイト にはC#の例を含む非常に優れた基本的な紹介があるようです。

于 2010-06-21T20:55:38.337 に答える
1

一言-クリブシート(またはそれは2つですか?):)

于 2010-06-21T20:53:48.467 に答える
1

正規表現コーチの使用

The regular expression is a sequence consisting of the expression '(\s*?)', the expression '(tag)', the expression '(\s*?)', and the character ','.

ここで(\ s *?)は次のように定義されますThe regular expression is a repetition which matches a whitespace character as often as necessary.

2番目のものも最初にaと一致し,ます

良い学習ウェブサイトに関しては、私はwww.regular-expressions.info/が好きです。

超シンプルバージョン:

文字列の先頭にある0個以上のスペース、タグが何であれ、0個以上のスペース、コンマ。

2つ目は

カンマ、0個以上のスペース、タグが何であれ、0個以上のスペース、カンマ。

于 2010-06-21T20:54:39.557 に答える
1

私はC#に精通していませんが、BashおよびJavaプログラミングに使用する正規表現のすばらしいガイドをお勧めします。これはほとんどすべての言語に適用されます。

http://www.amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/0596528124/ref=tmm_pap_title_0

この本を所有することは完全に30ドルの価値があります。それは非常に徹底的であり、正規表現の基本的な理解に大いに役立ちました。

-ライアン

于 2010-06-21T21:00:06.533 に答える
1

特にC#にタグを付けたので、.NETで実行されているため、C#で遊ぶために使用できるツールとしてRegexHeroをお勧めします。またRegexOptions、新しいフラグを作成するときにコンストラクターに渡すのと同じように、さまざまなフラグを切り替えることができますRegex

また、拡張機能をサポートするバージョンのVisual Studio 2010を使用している場合は、正規表現エディター拡張機能を確認します...入力するたびにポップアップ表示さnew Regex(れ、正規表現パターンのガイダンスとオートコンプリートが提供されます。

于 2010-06-21T21:04:35.037 に答える
0

また、追加情報を使用して正規表現をテストするための優れたサイト:http: //regex101.com/

于 2012-12-31T09:29:12.097 に答える
0

http://www.myregextester.com/C#は、適切な正規表現テスターであり、 regexpsのexplainオプションもあります。たとえば、次のを確認してください。

正規表現:

(?-imsx:^(\ s *?)(tagtext)(\ s *?)、)

次のように一致します。

ノードの説明
-------------------------------------------------- --------------------
(?-imsx:グループ化しますが、キャプチャしません(大文字と小文字を区別します)
                         (通常は^と$が一致します)(。
                         一致する\n)(一致する空白と#
                         通常は):
-------------------------------------------------- --------------------
  ^文字列の先頭
-------------------------------------------------- --------------------
  (グループ化して\ 1にキャプチャします:
-------------------------------------------------- --------------------
    \ s *?空白(\ n、\ r、\ t、\ f、および "")(0
                             以上(最小量に一致)
                             可能))
-------------------------------------------------- --------------------
  )\1の終わり
-------------------------------------------------- --------------------
  (グループ化して\ 2にキャプチャ:
-------------------------------------------------- --------------------
    tagtext'tagtext'
-------------------------------------------------- --------------------
  )\2の終わり
-------------------------------------------------- --------------------
  (グループ化して\ 3にキャプチャ:
-------------------------------------------------- --------------------
    \ s *?空白(\ n、\ r、\ t、\ f、および "")(0
                             以上(最小量に一致)
                             可能))
-------------------------------------------------- --------------------
  )\3の終わり
-------------------------------------------------- --------------------
  、'、'
-------------------------------------------------- --------------------
)グループ化の終了
-------------------------------------------------- --------------------
于 2010-06-21T21:10:58.143 に答える
0

正規表現は、2つの文字列が一致するかどうかではなく、特定の文字列がパターンに一致するかどうかを示します。

このサイトは、正規表現を学習およびテストするための私のお気に入りです。

http://gskinner.com/RegExr/

正規表現を作成するときにインタラクティブにテストでき、組み込みのチュートリアルを提供します。

于 2010-06-21T21:13:15.697 に答える
0

RejexはC#を使用していませんが、特殊文字のクイックリファレンスを含む正規表現をテストおよび学習するためのシンプルなツールです。

于 2010-06-21T21:15:40.573 に答える
0

コロンで区切られたある種の単語のリスト(UPDATE:コンマ)と一致させようとしているようです。最初のアイテムはおそらく最初のアイテムと一致し、2番目のアイテムは最初のアイテムの後に最後のアイテムを除いていくつかのアイテムと一致しています。ご理解いただければ幸いです:)。

正規表現に関する優れた情報源は、http://www.regular-expressions.info/にあります。

于 2010-06-21T20:55:26.530 に答える
0

正規表現についての非常に基本的な考え方がわかったら(そこにはリソースがたくさんあります)、正規表現を作成するためにExpressoを使用することをお勧めします。

Expressoエディターは、正規表現の初心者向けの教育ツールとしても、正規表現に関する幅広い知識を持つ経験豊富なプログラマーやWebデザイナー向けのフル機能の開発環境としても同様に適しています。

于 2010-06-21T20:56:45.003 に答える
0

あなたの前提は正しくありません。正規表現は、2つの文字列が同等であるかどうかを判断するために使用されるのではなく、入力文字列が特定のパターンに一致するかどうかを判断するために使用されます。

上記の最初のテストでは、「欲張りでない」を検索する「ゼロ以上の空白文字」を含まないテキストを探します。次に、中央の変数「tag」のテキストと一致し、次に「ゼロ以上の空白文字、貪欲ではない」と一致します。

2つ目は、コンマに続く限り空白を開始できることを除いて、非常に似ています。

この文脈で「貪欲でない」ことを説明するのは難しいです。特に空白文字を含む場合は、ここで詳細を確認してください。

于 2010-06-21T20:56:52.797 に答える
0

正規表現は、いくつかの特定の特性を持つ文字列のセットを記述する方法です。

2つの文字列を比較するだけでなく、文字列が特定の正規表現に一致するかどうかをテストするために通常行うことです。また、いくつかのパターンを尊重するトークン内の文字列の単純な解析を行うために使用することもできます。

正規表現の良いところは、文字列内で特定の制約を表現できることです。これにより、文字列を一般的に保ち、それらの制約を尊重する文字列のグループに一致させることができます。その後、あいまいさを残さない正式な仕様に従います。

ここでは、さまざまなプログラミング言語のさまざまな正規表現言語の比較表と、そのリンクをたどるとC#の特定のガイドを見つけることができます。

構文は正規表現の理論的なトピックからある程度標準化されているため、通常、さまざまな言語の実装は非常に似ています。したがって、正規表現に関するチュートリアルは問題ありません。C#APIに入る必要があります。

于 2010-06-21T20:57:36.203 に答える
0

1)最初の正規表現は、テスト文字列の先頭から大文字と小文字を区別しない一致を実行しようとしています。次に、オプションの空白、タグ内のすべて、オプションの空白、最後にコンマが続きます。

2つ目は、コンマ、オプションの空白、タグ内のすべての文字列、オプションの空白、最後にコンマを含む文字列に一致します。

C#用だと思いますが、優れた正規表現構文リファレンスを備えたPerlPocketReferenceを入手することをお勧めします。14年前に正規表現を学んでいたとき、それは私を大いに助けました。

于 2010-06-21T21:08:37.577 に答える