正则表达式中的XOR匹配

时间:2011-12-02 00:53:11

标签: php regex

我需要尝试匹配一个静态@或匹配模式[^\d][\w\.\-]+的字符串。

我知道我可以使用(...|...)来做或匹配,但我似乎无法让@[^\d][\w\.\-]+完全匹配。

这是我目前的尝试:(@|[^\d][\w\.\-]+)

因此,在这意味着它将以下列方式匹配:

'@'    MATCH

'www'  MATCH

'@www' NOT MATCH

'www@' NOT MATCH

'w@w'  NOT MATCH

有什么建议吗?

对于记录,这是在PHP 5.3中进行匹配。

2 个答案:

答案 0 :(得分:3)

如果您可以使用整个字符串匹配,则添加^$个锚点。

[^\d]会匹配 ,而不是数字。任何事情都包括@。所以添加一个断言:

preg_match('/^(@|(?!@)[^\d][\w\.\-]+)$/', $subject)

答案 1 :(得分:1)

  1. 您需要强制它将整个字符串与^...$
  2. 匹配
  3. 第二个表达式匹配@www就好了,因为它根据规则有效。您需要使用[\d@]
  4. 之类的内容修复规则

    演示:http://rubular.com/r/wrXL4yKxq3