@name "@new other content" "@" @here and here@
引用符で囲まれたものを除くすべての「 @ 」を一致させたい。
私は試した:
(?!\")\@(?!\")
部分的に機能し、「@」とは一致しませんが、「@newothercontent」とは一致します。
PHPで「preg_replace」を使用しています。
助けてくれてありがとう。
アップデート:
この場合、@を一致させたい: @name, @here, here@のみ...
「@」が常に「」の直後にある場合は、使用できます
(?<!\")\@
(?!\")\@(?!\")その時点であなたは間違っています。否定的な後読みアサーション ( (?<!...)) でなければなりません。次の先読みアサーションは、"@" の直後に ".
「@」が引用符の間のどこにでもある場合、php の正規表現では使用できません。
見積もりが常にバランスが取れているという仮定の下で、これを試すことができます
[^"\s]*@[^"\s]*(?=[^"]*(?:"[^"]*"[^"]*)*$)
ここでRegexrを参照してください
これは、" が前に偶数ある場合、@ を含む部分文字列に単純に一致します。
注意:文字列のどこかに一致しない引用符があると失敗します。