php - 正则表达式中的 XOR 匹配

标签 php regex

我需要尝试匹配静态 @ 或匹配模式 [^\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/

相关文章:

php - 如何使用 zen cart 在自定义脚本中查询数据库?

php - 使用带 [[ :<:]] [[:>:]] 的 REGEXP 在 CodeIgniter 上查询时出错

php - 为什么这些查询这么慢?

css - 使用 SED 和 RegEx 将下划线放回数百个 CSS 文件的链接中

java - 正则表达式:不以 "hede"结尾

python - 如何在 Django URL 模式中使用小数?

javascript - 需要一个能找到 "string"但找不到 "[string]"的正则表达式

php - Paypal 数字商品 : How to get item number after purchase made?

php:验证 POST 的最佳方式

php - Zend Framework 1.11.11 包含路径 open_basedir 问题