0

私はこのような文字列を持っています...

"test_test_test":"Hello \"Hello\" Hello","Oh_yea_oh_yea","Hi there buddy"

つかみたい

"test_test_test":"Hello \"Hello\" Hello"

これまでのところ、私の正規表現はこれです...

"test_test_test":

これにより、キーとコロンが取得されます。何が何であるかは常にわかり"test_test_test"ますが、コロンの後の値が何であるかはわかりません。引用自体の中にエスケープされた引用がないことを知っていれば簡単ですが、エスケープされています。ありがとう!

編集:

内部にカンマを含めることができ、内部にエスケープされていない引用符を含めることはできません。

私の考えは、次のようなものです...

"test_test_test":"[^(",)]*

私の頭では、これは単一引用符の後にコンマ (",) が続くまで続行し、その後停止することを意味します。ただし、上記では機能しません。

4

2 に答える 2

1

これはRAW正規表現です。文字列に入れるか、区切り文字を含める場合は、エスケープを追加する必要がある場合があります。

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

柔軟な間隔が必要な場合:

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

重要な部分はここにあります:(?:[^"\\]|\\[\\"])*。0個以上に一致します:非引用符または円記号、またはエスケープされた引用符\"またはエスケープされた円記号\\

上記の正規表現はまだ不正確です。引用符で囲まれた文字列の内容は、複数行にまたがることができます。それが良いかどうかは、引用符で囲まれた文字列の文法によって異なります。ただし、私が見た言語の複数行の引用符で囲まれた文字列は、通常、正規表現で説明されている形式を取りません。

正規表現は、引用符で囲まれた文字列"\n"も無効として扱います。ただし、これらのケースに対応するために、正規表現を少し簡単に変更できます。

于 2013-02-07T05:23:49.823 に答える
0

私の理解が正しければ、キーとカンマの前の最初のエントリを選択する必要があります。

アップデート:

実際には、その内容に関係なく、最初に引用された文字列が必要です。

したがって、正規表現は次のようになります。/"test_test_test".*?"(?:[^"\\])*"/

更新 2:

この正規表現は、文字列内のエスケープを詰まらせません:"test_test_test".*?".*[^\\"].*?"(?=,)

于 2013-02-07T05:16:22.977 に答える