나는이 URL을 , 나는 어떤 그룹을 꺼내 정규 표현식에 일치하도록 노력하고있어. 내가 가진 문제는 URL 이 “/”및 추가 URL 텍스트로 끝나 거나 계속 될 수 있다는 것 입니다. 다음과 같은 URL을 일치시키고 싶습니다.
- http : // server / xyz / 2008-10-08-4
- http : // server / xyz / 2008-10-08-4 /
- http : // server / xyz / 2008-10-08-4 / 123 / more
그러나 다음과 같이 일치하지 마십시오.
그래서 내 최선의 방법은 다음과 같다고 생각했습니다.
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]
끝에있는 문자 클래스에는 “/”또는 줄 끝이 포함됩니다. 캐릭터 클래스는 “$”에 만족하지 않는 것 같습니다. 올바른 그룹을 되돌 리면서 이러한 URL을 가장 잘 구별 할 수있는 방법은 무엇입니까?
답변
/(.+)/(\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 차 캡처 그룹 (.*)?
?
Quantifier — 0 번 과 1 번 사이 에서 가능한 한 많이 일치 하며 필요에 따라 돌려줍니다 (욕심).
.*
모든 문자와 일치 (줄 종결 자 제외)
*
Quantifier — 0 번 과 무제한 시간 사이 를 가능한 한 많이 일치 시켜 필요한만큼 돌려줍니다 (욕심).
$
문자열 끝의 위치를 주장
답변
/ 또는 내용의 끝을 일치 시키려면 (/|\z)
이는 여러 줄 일치를 사용하지 않는 경우에만 적용됩니다 (즉, 줄 바꿈으로 구분 된 URL 목록이 아닌 단일 URL과 일치하는 경우).
당신이 가지고있는 것의 업데이트 된 버전을 넣으려면 :
/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|\z)
나는 \S+?
아무것도 및 모든 것을 일치시키는 것이 아니라 공백이 아닌 ( )에 대한 욕심없는 일치로 시작을 변경했습니다 ( .*
)
답변
이제 원하는 것을 수행 할 몇 가지 정규식이 있으므로 적절하게 다룹니다.
무엇 언급되지 않은 것은 왜 시도하지 않습니다 일 : 내부 문자 클래스 $
(뿐만 아니라 ^
, .
와 /
) 특별한 의미가 없기 때문에 [/$]
일치하는 문자 중 하나 /
또는 문자 $
대신 정규식을 종료 ( /
) 또는 일치 줄 끝 ( $
).
답변
Ruby와 Bash에서는 $
괄호 안에 사용할 수 있습니다 .
/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)
(이 솔루션은 Pete Boughton과 유사하지만 문자열의 끝을 의미 하는를 사용하는 $
대신 행의 끝을 의미 하는을 사용 \z
합니다.)
답변
