숭고한 텍스트 정규 표현식이 여러 줄 태그를 감지하지 못합니다


129

여기에이 정규식이 있습니다.

\[sometag\](.*)\[/sometag\]

[sometag]태그로 둘러싸인 텍스트를 잡아야합니다 . string과 같이 이러한 태그에 포함 된 한 줄 정보에 작동합니다 [sometag]this is a bit of text[/sometag]. 그러나 다음과 같이 여러 줄에 걸쳐있는 텍스트에서는 작동하지 않습니다.

[sometag] here is more text

it spans more than one line [/sometag]

어떤 이유로 Sublime text의 정규 표현식 파인더는 여러 줄의 태그를 인식하지 못합니다. Sublime Text, 전환 가능한 옵션 또는 정규 표현식에 대한 개인적인 무능력에 문제가 있는지 알고 싶습니다.

답변:


239

처음에 dotall 수정자를 사용하여 (?s)점을 개행 문자와 일치 시키십시오.

(?s)\[sometag\](.*?)\[\/sometag\]

데모


감사! 그래도 추가 물음표를 포함시켜야하는 이유는 무엇입니까?
Maurdekye

8
?후에 *는 욕심없는 경기를 할 것입니다. 고려 [b]foo[/b]foo[b]bar[/b]예를 들어. \[b\].*\[\/b\]시작 b에서 마지막 종료 b까지 전체를 일치시킵니다.
Avinash Raj

단지 추가하고 제거와 재생 ?이에 regex101.com/r/gI0xC3/2
Avinash 주권을

11
(가?들)도 줄 바꿈을 포함에 점을 원인
cmroanirgo

3
별표 뒤에 물음표는 일치하지 않는 것으로 정의되므로 중요합니다.
andrej

12

어떤 이유로 도트 모드 수정이 허용되지 않는 경우 다음을 수행 할 수 있습니다.

[sometag](.|\n)+?[/sometag]

3
(.|\n)+?DOTALL 수정 자에 액세스 할 수있는 경우 사용하지 마십시오 . (?s)약간의 노력으로 사용할 수 없으면 [\s\S]/ [\d\D]/를 사용 [\w\W]하지만 여기에서 제안 된 대체 패턴은 사용하지 마십시오. 이 패턴은 매우 비효율적이며 시간 초과 문제를 쉽게 일으킬 수 있습니다.
Wiktor Stribiżew

1
@ WiktorStribiżew : 왜 비효율적인지 설명 할 수 있습니까? 나는 항상 사용 [\s\S]하지만 한 눈에 (.|\n)동등한 것 같습니까? 일치하는 그룹과 관련이 있습니까? 그러나 (?:.|\n)같은 것입니까?
Cerberus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.