예 : “이것은 단순한 문장입니다.”
“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 second
에This 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