Regex 正则表达式捕捉不正确
我有: 所需的行为是捕获Regex 正则表达式捕捉不正确,regex,Regex,我有: 所需的行为是捕获[和]之间的文本(两者的第一次出现)。因此,在这种情况下: [7/25/2015 8:40:18 PM] Ghost: [Saturday, July 25, 2015 8:13 PM] Nathan: <<< Quoted text [7/25/2015 8:40:18 PM]幽灵:[2015年7月25日星期六晚上8:13]内森: 您需要使您的*在第一次匹配时停止: \[(.*?)\] (.*?): (.*) 这将提取值 样本使用 7/25/2
[
和]
之间的文本(两者的第一次出现)。因此,在这种情况下:
[7/25/2015 8:40:18 PM] Ghost: [Saturday, July 25, 2015 8:13 PM] Nathan:
<<< Quoted text
[7/25/2015 8:40:18 PM]幽灵:[2015年7月25日星期六晚上8:13]内森:
您需要使您的*
在第一次匹配时停止:
\[(.*?)\] (.*?): (.*)
这将提取值
样本使用
7/25/2015 8:40:18 PM Ghost: Saturday, July 25, 2015 8:13 PM Nathan:
用这个
(\d+\/\d+\/+\d+ \d+\:\d+\:\d+ [A|P]M)[^:]*: ([A-Z][a-z]+\, [A-Z][a-z]* \d+, \d+ \d+:\d+ [A|P]M)
要捕获[…]
中首次出现的文本,可以使用更加简化的正则表达式:
\[([^]]*)]
看
从样本数据判断,不可能有任何嵌套的[…]
序列,方括号内不应该有杂散的]
。因此,否定字符类在这里看起来最好
以下是正则表达式的含义:
\[
-匹配文字[
([^]]*)
-匹配并捕获到组1中除]
以外的0个或更多字符(注意,我们不必在字符类的范围开始处转义]
)
]
-匹配一个文本]
(再次注意,这个结束方括号是明确的,因为它前面有一个转义的第一个[
)
这将匹配不带g
选项的第一次出现,您可以使用编程语言的适当函数/方法获得此行为
如果需要匹配字符串/行开头的第一个匹配项,请使用锚点^
(要强制多行模式,需要/m
修饰符):
请参见*
默认情况下是贪婪的,使用*?
进行非贪婪匹配。*
是贪婪的,它将消耗它所能消耗的一切。更改为:\[([^\]])\]
是的,修复了它。谢谢:)@mattrick请在这里发布相关的正则表达式,而不是链接到它。请在问题中添加语言标记。或者,为了提高性能:\[([^\]])]
(另外请注意,由于您转义了第一个[
,因此无需转义最后一个)。他正在寻找提取一组非常具体的数据
\[([^]]*)]
^\[([^]*&^]*)]