2014-09-23 3 views
0

10 자리 ID를 찾으려면 다음과 같은 정규 표현식을 사용합니다 (이상적으로 10보다 많은 숫자 집합은 고려하지 않는 것이 좋습니다. 예 : id = 12345678901) . 마지막 10 자리수를 찾으면 괄호 나 따옴표를 제외하고 이후의 모든 것을 휴지통으로 처리합니다. 그 경우에 그것은 단지 멈출 것입니다.해당 URL에 금지 된 텍스트가 포함되어 있지 않으면 URL에서 일부 ID를 캡처하는 정규식

www.site1\.com\/((?!someid\=12345name).)*([0-9]{10})[^\"\'\[\]\n\s]* 

그러나, 다음과 같은 예에서, 그것은 10 자리 숫자 후 BRACKER 또는 quiotation에서 멈추지 않고 또 다른 하나 찾기 전까지가는 계속 : [= 'http://www.site1.com/path/445-453/L?test=3456&test2=333629710&item=1058371930'URL] 어떤 제목을

을 (10)와 동일한 매개 변수를 몇 가지 링크를 발견 - 참고 http://regex101.com/r/pG5fA4/2

:이 URL [/ URL] 또는 [URL = 'http://www.site1.com/path/445-453/L?test=3456&test2=333629710&item=2932475321'] 일부 URL 제목이 [/ URL]의

는 더 많은 예제 라이브 URL을 참조하십시오 그 안에있는 숫자입니다. 지금은 대괄호 나 인용문을 살펴 보지 않는 한 마지막 10 자리 만 선택하고 싶습니다.

감사합니다.

답변

1

*은 오퍼레이터 인 입니다. greedy 연산자로 인해 .*은 문자열의 맨 끝에있는 마지막 숫자 집합에 도달 할 때까지 모든 문자 (줄 바꿈 제외)와 일치합니다. 비 욕심 많은 일치의 경우 *?을 사용하십시오. 이렇게하면 정량화 된 도트가 패턴이 성공하는 데 필요한만큼의 문자 만 일치하게됩니다.

((?!someid\=12345name).)*?([0-9]{10}) 
         ^

당신은 당신이 내다을 사용할 수 있습니다 '[ 또는 ] 마지막 & 전에 숫자의 집합을합니다.

www\.site1\.com/((?!someid=12345name).)*?([0-9]{10})(?=[\[\]'\s]|&[^&]*\n) 
+0

감사합니다. 이것은 분명히 도움이됩니다. 완벽 함의 유일한 점은 새로운 정규 표현식이 찾은 첫 번째 10 자리 숫자 집합을 가져 오는 것으로 나타났습니다. 브래킷이나 따옴표 앞에 마지막 자릿수를 선택하도록 허용 할 여지가 있습니까? – Yevgen

+0

- URL을 다시 작성한 후에 10 자리 ID 뒤에 괄호 또는 따옴표 앞에 모든 휴지통을 제거하고 싶기 때문에 결국 charclass를 제거 할 수 없습니다. - 실제로, 내가 왜 10 문자 자릿수의 두 세트를 갖게 될지 모르겠다. 그래서 내가 왜 그렇게 걱정하는지, 그리고 당신의 정규식 shoudl 작업도 걱정된다. - 어쨌든, 나는 또한 다음과 같은 시도와 좋은 결과를 주었다 : www.site1 \ .com \/((?! someid \ = 12345name) [^ \ "\ '\ [\] \ n \ s]) * ([0-9] {10}) [^ \ "\ '\ [\] \ n \ s] * - http://regex101.com/r/pG5fA4/4 – Yevgen

관련 문제