첫 경기에서 멈출 정규 표현식
내 정규식 패턴은 다음과 같습니다.
<xxxx location="file path/level1/level2" xxxx some="xxx">
위치에 지정된 따옴표의 부품에만 관심이 있습니다. 탐욕스러운 스위치가 없으면 아래처럼 쉽지 않아야합니까?
/.*location="(.*)".*/
작동하지 않는 것 같습니다.
기본적으로 "(.*)"
모든 표현식 과 일치 하기 때문에 정규 표현식을 욕심스럽지 않게 만들어야합니다 "file path/level1/level2" xxx some="xxx"
.
대신, 별표를 욕심없는 것으로 만들면 가능한 한 적은 문자와 일치하게됩니다.
/location="(.*?)"/
?
수량 자 ( ?
, *
또는 +
)를 추가하면 욕심이 없습니다.
location="(.*)"
탐욕스럽지 않은 경우를 제외 location=
하고는 "후"부터 "후"까지 일치합니다 some="xxx
. 따라서 당신은 필요하거나 .*?
(예를 들어 욕심이 없도록) 또는로 대체 .*
하는 것이 좋습니다 [^"]*
.
어때요?
.*location="([^"]*)".*
이것은. *로 무제한 검색을 피하고 첫 번째 인용 부호와 정확히 일치합니다.
엔진에서 지원하는 경우 욕심없는 일치를 사용하십시오. ?를 추가하십시오 캡처 내부.
/location="(.*?)"/
?
글로벌 플래그가없는 Lazy 한정자 를 사용하는 것이 정답입니다.
예 :
전역 플래그가 있으면 /g
아래에서와 같이 가장 낮은 길이의 일치 항목과 일치했을 것입니다.
당신이 사용하고 있기 때문에 정량화 된 서브 패턴 에 descried로와 펄 문서 ,
기본적으로, 정량화 된 하위 패턴은 " 욕심쟁이 "입니다. 즉 , 패턴의 나머지 부분을 계속 일치시키면서 가능한 한 여러 번 (특정 시작 위치가 지정됨) 일치시킵니다. 당신이 그것을 원하는 경우 시간의 최소 번호와 일치하는 수를의 정량 따라 와 에 "를?" . 그 의미는 변하지 않고 단지 "만족"이라는 것에 주목하십시오 :
*? //Match 0 or more times, not greedily (minimum matches)
+? //Match 1 or more times, not greedily
따라서 정량화 된 패턴이 최소 일치하도록하려면 다음을 수행하십시오 ?
.
/location="(.*?)"/
참고 URL : https://stackoverflow.com/questions/2503413/regular-expression-to-stop-at-first-match
'Programing' 카테고리의 다른 글
NumPy 배열을 csv 파일로 덤프 (0) | 2020.02.15 |
---|---|
가상 환경 내부에서 pip 자체를 어떻게 업데이트합니까? (0) | 2020.02.15 |
이 활동에는 이미 창 장식에서 제공하는 작업 표시 줄이 있습니다. (0) | 2020.02.15 |
jQuery : 테이블의 행 수 계산 (0) | 2020.02.15 |
2D 점이 다각형 내에 있는지 어떻게 알 수 있습니까? (0) | 2020.02.15 |