RegEx匹配分隔符之间的文本

dyn*_*oid 13 regex

我需要一个在分隔符内提取文本的正则表达式,但我在分隔符[DATA n]和[END DATA]中提取值时遇到问题

这是我的正则表达式

(?<=\[DATA\s+\d+\]).*(?=\[END DATA\])
Run Code Online (Sandbox Code Playgroud)

这是我想要匹配的示例数据

这里有一些文字

[DATA 1]
data one 
some more data
[END DATA]
[DATA 2]
data two
more data
data
[END DATA]
[DATA n]
more data 
data 
[END DATA]
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 23

当你真的不需要它时,你似乎正在使用正则表达式功能,如lookbehind和lookahead.尝试:

\[DATA\s+\d+\](.*?)\[END DATA\]
Run Code Online (Sandbox Code Playgroud)

这个正则表达式中只有一个捕获组(.*?).使用它之后,您要查找的结果应该在捕获组1中.

另请注意,我使用的非贪婪.*?匹配将匹配到第一个后续实例[END DATA].如果没有这个,如果你只使用.*,你将捕获到最后的 一切[END DATA].


too*_*php 6

在正则表达式中,[文本之间]称为字符类,正则表达式引擎只匹配括号之间的一个字符.你只需要使用反斜杠来使它们成为文字:

(?<=\[DATA\s+\d+\]).*(?=\[END DATA\])
Run Code Online (Sandbox Code Playgroud)


Ben*_*thy 5

默认情况下,点特殊字符不匹配换行符。确保您使用单行修饰符来实现正则表达式,或使用[\S\s]*?代替.*?

有关详细信息,请参阅http://www.regular-expressions.info/modifiers.htmlhttp://www.regular-expressions.info/dot.html