我需要尝试匹配一个静态@
或匹配模式[^\d][\w\.\-]+
的字符串。
我知道我可以使用(...|...)
来做或匹配,但我似乎无法让@
或[^\d][\w\.\-]+
完全匹配。
这是我目前的尝试:(@|[^\d][\w\.\-]+)
因此,在这意味着它将以下列方式匹配:
'@' MATCH
'www' MATCH
'@www' NOT MATCH
'www@' NOT MATCH
'w@w' NOT MATCH
有什么建议吗?
对于记录,这是在PHP 5.3中进行匹配。
答案 0 :(得分:3)
如果您可以使用整个字符串匹配,则添加^
和$
个锚点。
而[^\d]
会匹配 ,而不是数字。任何事情都包括@
。所以添加一个断言:
preg_match('/^(@|(?!@)[^\d][\w\.\-]+)$/', $subject)
答案 1 :(得分:1)
^...$
@www
就好了,因为它根据规则有效。您需要使用[\d@]