2011-12-02 22 views
3

我需要嘗試匹配一個字符串,該字符串可以是靜態的@或匹配[^\d][\w\.\-]+的模式。在正則表達式中的異或

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

這是我當前的嘗試:(@|[^\d][\w\.\-]+)

所以,在這個意味着它會做匹配以下方式:

'@' MATCH 

'www' MATCH 

'@www' NOT MATCH 

'[email protected]' NOT MATCH 

'[email protected]' NOT MATCH 

有什麼建議?

爲了記錄,這是在PHP 5.3中進行匹配。

回答

3

如果你可以用一個整串比賽直播,再加入^$錨。

[^\d]會匹配什麼這不是一個數字。任何事情都會包括@。所以加一個斷言:

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