@name "@new other content" "@" @here and here@
我希望匹配所有“ @ ”,不包括引号之间的内容。
我试过了:
(?!\")\@(?!\")
部分工作,与“@”不匹配,但匹配“@new其他内容”。
我在PHP中使用“preg_replace”。
感谢您的帮助。
更新:
在这种情况下,我想匹配@ on:@name, @here, here@
仅...
答案 0 :(得分:3)
如果“@”总是直接在“那么你可以使用
之后(?<!\")\@
你的(?!\")\@(?!\")
在这一点上是错误的,它必须是一个负面的后视断言((?<!...)
)。如果“@”后面跟着“。”,那么下面的前瞻断言只会失败。
如果“@”可以在引号之间的任何地方,那么在php中使用正则表达式是不可能的。
根据假设,报价总是平衡的,你可以试试这个
[^"\s]*@[^"\s]*(?=[^"]*(?:"[^"]*"[^"]*)*$)
当存在偶数量的“前进”时,这简单地匹配包含@的子字符串。
小心:当字符串中的任何位置都有不匹配的引号时,它会失败。