3

コンパイラ設計のプロジェクトで C# 正規表現を使用しています。

私は語彙アナライザーを使用しており、設定したルールに応じてコードをトークン化する必要があります。

文字列を として定義し[\".*?\"] 、二重引用符をとして定義しまし[\"]た。

入力"Hi"するとSTRING TOKENとして読み込まれます。

しかし、 を入力する" \" "と、 に対して STRING が生成され" \"、 に対して DOUBLE-QUOTE が生成され"ます。

STRING TOKENとして読みたい。

つまり、エスケープされた二重引用符を含む文字列を正しく解析したいと考えています。

4

2 に答える 2

2

あなたが望むパターンは次のとおりだと思います:

"(?:[^"]|\")*"

これは、引用符内の非引用符またはスラッシュと引用符のペアに一致します。例えば:

var input = @"1 2 3 ""Hello \""Word\""!""";
var match = Regex.Match(input, @"""(?:[^""]|\"")*""");

Console.WriteLine(match.Value); // "Hello \"Word\"!"
于 2013-07-10T04:09:03.537 に答える
0

入力した各文字の ASCII コードを出力してみてください。バックスラッシュの効果は、入力がコマンド ライン、GUI、またはファイルのいずれであるかによって異なります。

気が進まないマッチャーは\、 をそれ自体の文字として扱い、 の修飾子として扱っていない可能性があり"ます。

于 2013-07-10T04:13:37.097 に答える