Php 正则表达式中的异或匹配

Php 正则表达式中的异或匹配,php,regex,Php,Regex,我需要尝试匹配一个静态@字符串或匹配模式[^\d][\w\.\-]+ 我知道我可以使用(…|…)进行匹配,但我似乎无法使用@或[^\d][\w\.-]+进行独家匹配 以下是我当前的尝试:(@|[^\d][\w\.\-]+) 因此,这意味着它将以以下方式匹配: '@' MATCH 'www' MATCH '@www' NOT MATCH 'www@' NOT MATCH 'w@w' NOT MATCH 有什么建议吗 作为记录,这是在PHP5.3中进行匹配 您需要强制它将整个字符

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

我知道我可以使用
(…|…)
进行匹配,但我似乎无法使用
@
[^\d][\w\.-]+
进行独家匹配

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

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

'@'    MATCH

'www'  MATCH

'@www' NOT MATCH

'www@' NOT MATCH

'w@w'  NOT MATCH
有什么建议吗

作为记录,这是在PHP5.3中进行匹配

  • 您需要强制它将整个字符串与
    ^…$
  • 第二个表达式与
    @www
    匹配得很好,因为根据规则它是有效的。您需要使用类似于
    [\d@]

  • 演示:

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

    [^\d]
    将匹配任何非数字的项。任何东西都包括
    @
    。因此,添加一个断言:

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