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请在这里发布相关的正则表达式,而不是链接到它。请在问题中添加语言标记。或者,为了提高性能:
\[([^\]])]
(另外请注意,由于您转义了第一个
[
,因此无需转义最后一个)。他正在寻找提取一组非常具体的数据
\[([^]]*)]
^\[([^]*&^]*)]