2011-12-02 3 views
3

정적 인 @이거나 패턴 [^\d][\w\.\-]+과 일치하는 문자열을 시도하고 일치시켜야합니다.정규 표현식에서 XOR 일치

(...|...)을 사용하거나 일치시킬 수 있다는 것을 알고 있지만, @ 또는 [^\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) 
1
  1. 당신은 두 번째 표현식이 규칙에 따라 유효 때문에 잘 @www 일치 ^...$
  2. 와 전체 문자열을 일치하도록 강제 할 필요가있다. 당신은 [\[email protected]]

데모 같은 것을 사용하여 규칙을 수정해야합니다 : 당신이 전체 문자열 일치 살 수 있다면 http://rubular.com/r/wrXL4yKxq3

관련 문제