我需要尝试匹配静态 @
或匹配模式 [^\d][\w\.\-]+
的字符串。
我知道我可以使用 (...|...)
来做或匹配,但我似乎无法得到 @
或 [^\d][\w\.\-]+
进行排他性匹配。
这是我目前的尝试:(@|[^\d][\w\.\-]+)
因此,这意味着它将以下列方式进行匹配:
'@' MATCH
'www' MATCH
'@www' NOT MATCH
'www@' NOT MATCH
'w@w' NOT MATCH
有什么建议吗?
郑重声明,这是在 PHP 5.3 中进行匹配。
最佳答案
如果您可以接受整个字符串匹配,则添加 ^
和 $
anchor 。
[^\d]
将匹配任何 不是数字的东西。任何内容都将包含 @
。所以添加一个断言:
preg_match('/^(@|(?!@)[^\d][\w\.\-]+)$/', $subject)
关于php - 正则表达式中的 XOR 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8350494/