正则表达式 - 匹配字符串和各处之间的字符

时间:2012-11-14 07:19:42

标签: php regex

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

我希望匹配所有“ @ ”,不包括引号之间的内容。

我试过了:

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

部分工作,与“@”不匹配,但匹配“@new其他内容”。

我在PHP中使用“preg_replace”。

感谢您的帮助。

更新:

在这种情况下,我想匹配@ on:@name, @here, here@仅...

1 个答案:

答案 0 :(得分:3)

如果“@”总是直接在“那么你可以使用

之后
(?<!\")\@

你的(?!\")\@(?!\")在这一点上是错误的,它必须是一个负面的后视断言((?<!...))。如果“@”后面跟着“。”,那么下面的前瞻断言只会失败。

如果“@”可以在引号之间的任何地方,那么在php中使用正则表达式是不可能的。

根据假设,报价总是平衡的,你可以试试这个

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

here on Regexr

当存在偶数量的“前进”时,这简单地匹配包含@的子字符串。

小心:当字符串中的任何位置都有不匹配的引号时,它会失败。