2011-04-21 4 views
2

크롤러에 대한 제외 정규식을 만들려고합니다. /archives/ 디렉토리에 나타나는 모든 파일 (.php)을 색인화하고 싶습니다. 따라서 정규 표현식은 /archives/ 디렉토리에있는 것을 제외하고는 모두 .php 파일과 일치해야합니다 (그러나 깊이 중첩되어 있음). 내가 믿는일부 .php 파일을 찾으려면 Regex

www.mysite.com/archives/123qwe/index.php 

하지만

www.mysite.com/123qwe/index.php 

색인이 정규식 작동합니다 그래서, 예를 들어,이 것 (?<!\/archives\/.*)\.php$

을 그러나, 나는 때문에 < 문자를 사용할 수 아니에요 나는 입력에서 <의 sanitizes 웹 양식에 정규식을 제출해야합니다. &lt;을 사용하면 정규식이 깨집니다. 그래서 <을 필요로하지 않고이 정규식을 형성하는 다른 방법이 있습니까?

+0

이 질문은 정규식 그 자체가 아니라 폼 직렬화에 관한 것입니다. –

+0

정규 표현식과 일치하는 다른 방법을 찾고 있습니다. 양식에 대한 제어권이 없으므로 <사용할 수는 없습니다. – thugsb

답변

2

. 이 문자열에는 /magazine/ 없습니다 그것은 당신의 접근 방식에 .php

그게 매우 유사로 끝나는하지만 <없는 경우 정규 표현식이 일치해야합니다.

^www\.mysite\.com 
(?: 
/    # After consuming the `/`... 
    (?!archives/) # if the next name isn't `archives`... 
    [^/.]+   # consume it. 
)+    # Repeat as needed. 
\.php$ 

당신이 정규식을 만들 때 당신이있어 : 또는, 더 읽기 쉽게

^www\.mysite\.com(?:/(?!archives/)[^/.]+)+\.php$ 

을 :

당신은 Regexr

+0

유망 해 보입니다. 크롤러에 넣고 투표하면 투표 할게요. 고마워. – thugsb

+0

완벽. 그것은 내가 원하는만큼 정확하게했다. 감사! – thugsb

0

욕심이 많을뿐 아니라 정규 표현식에 보관 하시겠습니까?

(?!.*\/magazine\/)(?:^.*\.php$) 

에 대해이 부정적인 모습 앞서 대신 부정적인 lookbehind을 무엇

^(\/archives\/.+?)\.php$ 
+0

그건 내가 원하는 것의 반대입니다. My regex는 **/**/**/**/**와 일치하는 파일을 제외하고 ** .php가 있지만/archives /가없는 URL과 일치시켜야합니다. – thugsb

+1

확인해 주셔서 감사합니다. 질문에 자신이 모순되었습니다. "/ archives/디렉토리에 나타나는 모든 .php 파일을 색인화하고 싶습니다. – Duniyadnd

2

여기에 행동에서 볼 수있는 것은이 시도 계속 진행하는 방법을 모르면 lookbehind가 처음으로 도달하는 첫 번째 도구가되어서는 안됩니다. 사실 나는 그들을 최후의 수단으로 생각하는 경향이있다. 그것들은 그들이 소개하는 복잡성을 상쇄시킬 정도로 유용하지 않습니다.

+0

'^ www \ .mysite \ .com (? : (?!/archives /) \ S) + \. php $'를 사용하면 더 짧고 수량 한정자가 필요하지 않기 때문에 사용한다고 생각합니다. 우리 둘다 여전히'www.mysite.com/123qwe/index/archives.php'를 통과하지만 원래 스펙대로는 괜찮다고 생각합니다. – tchrist

+0

Lookbehinds는 많은 문제가있는 것처럼 보입니다! 나는 스템타의 대답에서 정규 표현식을 사용했으나 이것이 효과가있을 것으로 판단된다. 감사. – thugsb