4

次の文字列を検討してください

"Some" string with "quotes" and \"pre-slashed\" quotes

正規表現を使用して、前にスラッシュがないすべての二重引用符を見つけたいと思います。だから私は正規表現が例文This....の4つの一致を見つけることを望みます.

[^\\]"

...そのうちの 3 つしか見つかりません。これは、スラッシュの存在を否定するコマンドを最初に検証する正規表現のステート マシンによるものだと思います。

つまり、何らかの後読みを使用して正規表現を作成する必要がありますが、これらの先読みと後読みを使用する方法がわかりません...それが私が探しているものかどうかさえわかりません。

次の試行は、4 つの一致ではなく、6 つの一致を返します...

"(?<!\\)
4

3 に答える 3

3
"(?<!\\")

あなたが探しているものです

「Some」と「quotes」を一致させたい場合は、

(?<!\\")(?!\\")"[a-zA-Z0-9]*"

しましょう

説明:

  • (?<!\\")-ネガティブな後ろ姿。メイン式の前に一致できないグループを指定します
  • (?!\\")-ネガティブな先読み。メイン式の後に一致できないグループを指定します
  • "[a-zA-Z0-9]*"-通常の引用符間で一致する文字列

つまり、「前」と「後」が含まれていないが、二重引用符で囲まれているものに一致します

于 2012-06-18T11:27:51.853 に答える
1

次のように、後読みの後に引用符を移動します。

(?<!\\)"

のようなケースにも注意してください

"escaped" backslash \\"string\"

これらを処理するには、次のような式を使用できます。

(?<!\\)(?:\\\\)*"
于 2012-06-18T12:13:40.497 に答える
0

これを試して

(?<!\\)(?<qs>"[^"]+")

説明

<!--
(?<!\\)(?<qs>"[^"]+")

Options: case insensitive

Assert that it is impossible to match the regex below with the match ending at this position (negative lookbehind) «(?<!\\)»
   Match the character “\” literally «\\»
Match the regular expression below and capture its match into backreference with name “qs” «(?<qs>"[^"]+")»
   Match the character “"” literally «"»
   Match any character that is NOT a “"” «[^"]+»
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
   Match the character “"” literally «"»
-->

コード

try {
    if (Regex.IsMatch(subjectString, @"(?<!\\)(?<qs>""[^""]+"")", RegexOptions.IgnoreCase)) {
        // Successful match
    } else {
        // Match attempt failed
    } 
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}
于 2012-06-18T11:26:51.360 に答える