1
@name "@new other content" "@" @here and here@

引用符で囲まれたものを除くすべての「 @ 」を一致させたい。

私は試した:

(?!\")\@(?!\")

部分的に機能し、「@」とは一致しませんが、「@newothercontent」とは一致します。

PHPで「preg_replace」を使用しています。

助けてくれてありがとう。

アップデート:

この場合、@を一致させたい: @name, @here, here@のみ...

4

1 に答える 1

3

「@」が常に「」の直後にある場合は、使用できます

(?<!\")\@

(?!\")\@(?!\")その時点であなたは間違っています。否定的な後読みアサーション ( (?<!...)) でなければなりません。次の先読みアサーションは、"@" の直後に ".

「@」が引用符の間のどこにでもある場合、php の正規表現では使用できません。

見積もりが常にバランスが取れているという仮定の下で、これを試すことができます

[^"\s]*@[^"\s]*(?=[^"]*(?:"[^"]*"[^"]*)*$)

ここでRegexrを参照してください

これは、" が前に偶数ある場合、@ を含む部分文字列に単純に一致します。

注意:文字列のどこかに一致しない引用符があると失敗します。

于 2012-11-14T07:24:34.080 に答える