Programing

첫 경기에서 멈출 정규 표현식

lottogame 2020. 2. 15. 19:33
반응형

첫 경기에서 멈출 정규 표현식


내 정규식 패턴은 다음과 같습니다.

<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



반응형