URL 줄 끝 또는 "/"문자와 일치하는 정규식


80

나는이 URL을 , 나는 어떤 그룹을 꺼내 정규 표현식에 일치하도록 노력하고있어. 내가 가진 문제는 URL 이 "/"및 추가 URL 텍스트로 끝나 거나 계속 될 수 있다는 것 입니다. 다음과 같은 URL을 일치시키고 싶습니다.

그러나 다음과 같이 일치하지 마십시오.

그래서 내 최선의 방법은 다음과 같다고 생각했습니다.

/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]

끝에있는 문자 클래스에는 "/"또는 줄 끝이 포함됩니다. 캐릭터 클래스는 "$"에 만족하지 않는 것 같습니다. 올바른 그룹을 되돌 리면서 이러한 URL을 가장 잘 구별 할 수있는 방법은 무엇입니까?

답변:


41
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)(/.*)?$

1 차 캡처 그룹 (.+)

.+ 모든 문자와 일치 (줄 종결 자 제외)

  • + 정량 - 사이의 일치 하나무제한 가능주고 다시 여러 번 배 것은, 필요에 따라 (욕심)

2 차 캡처 그룹 (\d{4}-\d{2}-\d{2})

\d{4}숫자와 일치 (같음 [0-9])

  • {4} 수량 자 — 정확히 4 번 일치

-문자 -그대로 일치 (대소 문자 구분)

\d{2}숫자와 일치 (같음 [0-9])

  • {2} 수량 자 — 정확히 2 번 일치

-문자 -그대로 일치 (대소 문자 구분)

\d{2}숫자와 일치 (같음 [0-9])

  • {2} 수량 자 — 정확히 2 번 일치

-문자 -그대로 일치 (대소 문자 구분)

3 차 캡처 그룹 (\d+)

\d+숫자와 일치 (같음 [0-9])

  • + 정량 - 사이의 일치 하나무제한 가능주고 다시 여러 번 배 것은, 필요에 따라 (욕심)

4 차 캡처 그룹 (.*)?

? Quantifier0 번 과 1 번 사이 에서 가능한 한 많이 일치 하며 필요에 따라 돌려줍니다 (욕심).

.*모든 문자와 일치 (줄 종결제외)

  • * Quantifier0 번 과 무제한 시간 사이 를 가능한 한 많이 일치 시켜 필요한만큼 돌려줍니다 (욕심).

$ 문자열 끝의 위치를 ​​주장


126

/ 또는 내용의 끝을 일치 시키려면 (/|\z)

이는 여러 줄 일치를 사용하지 않는 경우에만 적용됩니다 (즉, 줄 바꿈으로 구분 된 URL 목록이 아닌 단일 URL과 일치하는 경우).


당신이 가지고있는 것의 업데이트 된 버전을 넣으려면 :

/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|\z)

나는 \S+?아무것도 및 모든 것을 일치시키는 것이 아니라 공백이 아닌 ( )에 대한 욕심없는 일치로 시작을 변경했습니다 ( .*)


6
내가 더 많은 포인트를 줄 수있는 방법;) 감사합니다. 문서화 (/ | \ A)는 슬래시 또는 문자열의 시작과 일치합니다.
Senica Gonzalez 2011

새로운 Gold Answer 배지를 축하합니다.;)-방금 100까지 밀어 붙였다는 것을 깨달았습니다!
random_user_name

63

이제 원하는 것을 수행 할 몇 가지 정규식이 있으므로 적절하게 다룹니다.

무엇 언급되지 않은 것은 왜 시도하지 않습니다 일 : 내부 문자 클래스 $(뿐만 아니라 ^, ./) 특별한 의미가 없기 때문에 [/$]일치하는 문자 중 하나 /또는 문자 $대신 정규식을 종료 ( /) 또는 일치 줄 끝 ( $).


8
이것은 자주 잊혀지고 정규식 문서에서 충분히 언급되지 않은 것입니다.
Steve Dunn

6
^는 문자 클래스에서 특별한 의미를 가질 수 있습니다. 클래스의 첫 번째 문자 인 경우 다른 문자를 제외한 모든 항목과 일치하는 네거티브 클래스가됩니다. 예를 들어 a 또는 b를 제외한 모든 항목과 일치하려면 [^ ab]를 사용할 수 있습니다. ^ 리터럴을 포함하려면 첫 번째가 아닌지 확인하십시오. 따라서 a, b 또는 ^ 중 하나와 일치하려면 [ab ^]를 사용합니다.
David Mason

18

Ruby와 Bash에서는 $괄호 안에 사용할 수 있습니다 .

/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)

(이 솔루션은 Pete Boughton과 유사하지만 문자열의 끝을 의미 하는를 사용하는 $대신 행의 끝을 의미 하는을 사용 \z합니다.)


2
내가 말할 수있는 PHP도. 실제로 어떤 구현 $에서도 괄호 안에 사용할 수없는 이유 가 없습니다 (). []그것을 문자 그대로 만드는 것은 대괄호 입니다.
Joel Mellon 2014

3
$자바 스크립트에서는 이런 방식으로 작동하지만 \z그렇지 않습니다 (Chrome 48, Firefox 43, IE9).
Vsevolod Golovanov

1
이것은 가장 간단한 옵션입니다. 슬래시 또는 줄 끝과 일치합니다. 이 질문의 제목과도 일치합니다!
Brett Donald
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.