[regex] 정규식 두 문자열 사이의 모든 문자와 일치

예 : “이것은 단순한 문장입니다.”

“This is”와 “sentence”사이의 모든 문자를 일치시키고 싶습니다. 줄 바꿈은 무시해야합니다. 올바른 구문을 알 수 없습니다.



답변

예를 들어

(?<=This is)(.*)(?=sentence)

정규식

나는 lookbehind를 사용 하고 “This is”와 “sentence”가 매치에 포함되지 않도록 (?<=)앞을 내다 (?=)보지만, 이것은 유스 케이스에 달려 있습니다 This is(.*)sentence. 간단히 쓸 수도 있습니다 .

여기서 중요한 것은 정규식 엔진의 “dotall”모드를 활성화 .하여 줄 바꿈과 일치하는 것입니다. 그러나이 작업을 수행하는 방법은 정규식 엔진에 따라 다릅니다.

다음은 또는를 사용하는 .*경우 .*?입니다. 첫 번째는 탐욕스럽고 문자열의 마지막 “문장”까지 일치하고 두 번째 것은 게으 르며 문자열의 다음 “문장”까지 일치합니다.

최신 정보

정규식

This is(?s)(.*)sentence

(? s)가 dotall 수정자를 켜면 .개행 문자 와 일치합니다.

업데이트 2 :

(?<=is \()(.*?)(?=\s*\))

“이것은 (단순한) 문장”과 일치합니다. Regexr 에서 여기를 참조하십시오


답변

게으른 수량 자 필요

허용 된 답변의 정규 표현식이 나에게 맞지 않기 때문에이 질문을 부활시킵니다. 왜? 때문에

(?<=This is)(.*)(?=sentence)

일치 my first sentence. This is my secondThis is my first sentence. This is my second sentence.

데모를 참조하십시오 .

두 둘러보기 사이에 지연 수량 화기가 필요합니다. ?별표를 추가 하면 별이 게으르게됩니다.

이것은 당신이 원하는 것과 일치합니다 :

(?<=This is).*?(?=sentence)

데모를 참조하십시오 . 필요하지 않은 캡처 그룹을 제거했습니다.

줄 바꿈에 걸쳐 일치하는 DOTALL 모드

데모에서는 “dot matches line breaks mode”(일명) dot-all이 설정됩니다 ( 다양한 언어로 DOTALL을 켜는 방법 참조 ). 많은 정규 표현식에서 온라인 수정 자로 설정 (?s)하여 표현식을 다음 과 같이 설정할 수 있습니다 .

(?s)(?<=This is).*?(?=sentence)

참고


답변

시도 This is[\s\S]*sentence, 자바 스크립트에서 작동


답변

이:

This is (.*?) sentence

자바 스크립트에서 작동합니다.


답변

이것을 사용하십시오 : (?<=beginningstringname)(.*\n?)(?=endstringname)


답변

누군가 Jenkins 컨텍스트 내에서 이에 대한 예를 찾고있는 경우. build.log를 구문 분석하고 일치하는 것을 찾으면 일치하는 빌드에 실패합니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

node{
    stage("parse"){
        def file = readFile 'build.log'

        def regex = ~"(?s)(firstStringToUse(.*)secondStringToUse)"
        Matcher match = regex.matcher(file)
        match.find() {
            capturedText = match.group(1)
            error(capturedText)
        }
    }
}


답변

당신은 이것을 간단히 사용할 수 있습니다 : \This is .*? \sentence