6

定期的な表現を確認するために、このチュートリアルを読みました。とにかく、そのチュートリアルでは\b、単語の境界(\w文字と\W文字の間)に一致することが言及されています。このチュートリアルには、expresso(正規表現の作成に役立つプログラム)をインストールできるリンクもあります。

だから私はエスプレッソで正規表現を作成しました、そして私は一致するようになりました。同じ正規表現をVisualStudioにコピーすると、一致しません。見てください:


ここに画像の説明を入力してください


ここに画像の説明を入力してください

なぜ私は試合に出られないのですか?即時ウィンドウに、可変出力の内容を表示しています。expressoでは一致しますが、VisualStudioでは一致しません。なぜ?

4

2 に答える 2

26

C#言語.NET正規表現には、どちらも独自のバックスラッシュエスケープシーケンスのセットがありますが、C#コンパイラは文字列内のをインターセプトし"\b"、ASCIIバックスペース文字に変換するため、RegExクラスはそれを認識しません。文字列を逐語的にするか(アットマークのプレフィックス)、または「b」をダブルエスケープして、バックスラッシュが次のように正規表現に渡されるようにする必要があります。

@"\bCOMPILATION UNIT";

または

"\\bCOMPILATION UNIT"

.NETRegExのドキュメントではこれが明確になっていないと思います。これも最初は理解するのに少し時間がかかりました。

おもしろい事実:\r\n文字(それぞれキャリッジリターンと改行)およびその他のいくつかは、 RegExとC#言語の両方で認識されるため、コンパイルされた文字列が異なっていても、最終結果は同じです。

于 2012-06-19T15:27:01.810 に答える
3

を使用する必要があります@"\bCOMPILATION UNIT"。これは逐語的なリテラルです。"\b"代わりに行うと\b、特殊文字に解析されます。"\\b"また、ダブルバックスラッシュが実際のバックスラッシュに解析されるを実行することもできますが、正規表現を処理する場合は、一般的に逐語的に使用する方が簡単です。

于 2012-06-19T15:27:47.967 に答える