RegEx匹配分隔符之间的文本

时间:2010-09-13 03:03:25

标签: regex

我需要一个在分隔符内提取文本的正则表达式,但我是 在分隔符[DATA n]和[END DATA]

中提取值时出现问题

这是我的正则表达式

(?<=\[DATA\s+\d+\]).*(?=\[END DATA\])

以下是我想要匹配的示例数据

这里有一些文字

[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]

4 个答案:

答案 0 :(得分:21)

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

\[DATA\s+\d+\](.*?)\[END DATA\]

此正则表达式(.*?)中只有一个捕获组。使用此功能后,您要查找的结果应位于捕获组1中。

另请注意,我使用了非贪婪的.*?匹配,该匹配将匹配第一个后面的[END DATA]实例。如果不使用此功能,如果仅使用.*,则会捕获 last [END DATA]以外的所有内容。

答案 1 :(得分:6)

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

(?<=\[DATA\s+\d+\]).*(?=\[END DATA\])

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

使用\来转义字符。

\[DATA\s\d\]+([^\[]+)\[[^\]]+\]