2014-02-19 3 views
0

제외한 모든 영숫자 하위 도메인, 이것은 큰 정규식 (PHP)의 작품이다 : 나는 유효한 하위 도메인에 사용정규식 : www가

((?:[0-9A-z_-]+)) 

,하지만 난 모든 하위 도메인 제외 을 "받아 들일 싶습니다 www "

영숫자"선택기 "가있을 때 어떻게 할 수 있습니까?

편집 : 마지막으로 (\b(?!www\b)(?:[0-9A-Za-z_-]+)) 사용, 팀 및 ATS

+1

'(?! www)'를 사용해보십시오. [추가 정보] (http://www.regular-expressions.info/completelines.html) ('특정 단어를 포함하거나 포함하지 않는 라인 찾기'단락으로 이동하십시오.) – Laoujin

+0

_Almost_, 그러나 완전히 일치하지는 않습니다 [Regex for ANY "www"를 제외한 문자열? (하위 도메인)] (http://stackoverflow.com/q/7099397/2936460). – SQB

답변

2

덕분에이 시도 :이 "하지 WWW를"말을 부정적 예측을 사용

((?!www)(?:[0-9A-Za-z_-]+)) 

.

여기서는 정규 표현식의 나머지 부분 (작성한대로 더 큰 표현식의 일부임을 나타냄)을 사용하여이 부분에 가능한 하위 도메인이 있는지 확인합니다. 따라서이 부분은 하위 도메인의 모두과 일치해야하지만 모두 일치하는지 확인하지 않아도됩니다.
(사용할 수 없으므로) 할 수 없으므로 www 뒤에 적절한 경계 감지를 삽입하십시오. 아마 \b이면 충분합니다.

+0

고마워, 효과가 있었어! (9 분 안에 답을 수락 할 수 있음) –

+0

아무런 문제가 없지만 기다릴 수 있습니다. – SQB

+1

도메인 이름에 www가 들어 있지 않다는 뜻입니까? 그게 시험이라면 어떨까요? – Srb1313711

3

먼저 정규식이 올바르지 않으므로 ((?:[0-9A-Za-z_-]+)) (또는 간단히 ([\w-]+) - 캡처하지 않는 그룹은 필요 없음)이어야합니다. 일치하지 않으려는 문자가 Za 사이에 있습니다.

둘째, negative lookahead assertion을 사용하여 일치하는 문자열이 www이 아닌지 확인하십시오. 우리가 www에서 submatch ww을 복용하지 않을 있는지 확인 (또는 wwwwwhat.sgoing.on 일치하지)하기 위해서는 문맥에 따라, word boundary anchors를 추가 할 필요가 있습니다 : 나 하위 도메인을 확인하는

\b(?!www\b)([\w-]+) 
+0

잘 설명해 주셔서 감사합니다. 여러 하위 도메인 (subsubdomain, subsubsubdomain ...)을 허용하지만 하나만 유효합니다. –

+0

다음과 같이 사용했습니다. (\ b (?! www \ b) (? : [ 0-9A-Za-z _-] +))는 도트를 허용하지 않습니다. –

0

이 작동합니다.

^([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?\.){0,}([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?){1,63}(\.[a-z0-9]{2,7})+$ 
+1

이것은 일치에서 'www'를 제외하지 않습니다. 이는 명시 적으로 ** 요청 된 것입니다. – SQB

관련 문제