同じ行の前に特定の文字がない場合にのみパターンを一致させるにはどうすればよいですか?
次の正規表現コードがあります。
pattern = @"(?<=^|[\s.(<;])(?<!//)(" + Regex.Escape(keyword) + @")(?=[\s.(>])";
replacement = "<span style='" + keywordStyle + "'>$1</span>";
code = Regex.Replace(code, pattern, replacement);
同じ行の前に 2 つのスラッシュがない場合にのみ一致する基準を追加したいと思います (C# コメント)。
私はそれをいじって、パターンを修正しました:
pattern = @"(?<!\/\/)(?<=^|[\s.(<;])(?<!//)(" + Regex.Escape(keyword) + @")(?=[\s.(>])";
しかし、どうやらこれは、2 つのスラッシュがキーワードの直前の2 文字である場合にのみ機能します。
したがって、このパターンは「//foreach」には一致しませんが、「// foreach」には一致します。
この場合、負の後読みを使用できますか、または負の後読み以外の方法でこれを達成できますか?
ありがとうございました。
編集:
私は十分に明確ではなかったと思います。私の問題を繰り返すには:
私は構文の強調表示に取り組んでおり、「foreach」などの C# キーワードの一致を見つける必要があります。ただし、2 つのスラッシュで定義されるコメントも考慮する必要があります。コメントの一部である場合、キーワード「foreach」と一致させたくありません(同じ行の前のどこかに2つのスラッシュがあります。
この場合、「// some text foreach」のように、スラッシュが必ずしもキーワードの直前にあるとは限らないため、否定的な後読みは役に立ちません。この foreach を一致させたくありません。
繰り返しますが、私の質問は次のとおりです。2 つのスラッシュが同じ行の前にない場合にのみ一致するようにパターンを変更するにはどうすればよいですか?
私の質問が今明確であることを願っています。