Regex 正则表达式-为什么问号的行为是这样的?

Regex 正则表达式-为什么问号的行为是这样的?,regex,Regex,我在学regex。当我匹配此项时: \d[^\w]\d 关于这个 30-01-2003 15:20 我有3场比赛:0-0,1-2,35和5:2。 当我尝试在正则表达式的末尾添加问号(\d[^\w]\d?)时,我的匹配项不会改变。 当我将问号移到方括号(\d[^\w]?\d)后,匹配项现在是30、01、20、03、15和20。 当我将问号移到方括号(\d?[^\w]\d)之前时,我的匹配项与第一种情况相同 为什么会这样?我知道?运算符将前面的字符标记为可选字符,因此我希望在第二种情况下出现这种

我在学regex。当我匹配此项时:

\d[^\w]\d
关于这个

30-01-2003 15:20
我有3场比赛:0-0,1-2,35和5:2。 当我尝试在正则表达式的末尾添加问号(
\d[^\w]\d?
)时,我的匹配项不会改变。 当我将问号移到方括号(
\d[^\w]?\d
)后,匹配项现在是30、01、20、03、15和20。 当我将问号移到方括号(
\d?[^\w]\d
)之前时,我的匹配项与第一种情况相同


为什么会这样?我知道
运算符将前面的字符标记为可选字符,因此我希望在第二种情况下出现这种行为,但在第一种或第三种情况下不会出现这种行为。

您只需要它

-两种解决方案-

1。REGEXP:

\d+ 
\d =>numbers
+ => 1 or more
30-01-2003 15:20
30
01
2003
15
20
1。说明:

\d+ 
\d =>numbers
+ => 1 or more
30-01-2003 15:20
30
01
2003
15
20
2。REGEXP

[0-9]+
2。解释

[0-9] <= Numbers
+ <= 1 or more
结果:

\d+ 
\d =>numbers
+ => 1 or more
30-01-2003 15:20
30
01
2003
15
20
享受


请参见:

您只需要它

-两种解决方案-

1。REGEXP:

\d+ 
\d =>numbers
+ => 1 or more
30-01-2003 15:20
30
01
2003
15
20
1。说明:

\d+ 
\d =>numbers
+ => 1 or more
30-01-2003 15:20
30
01
2003
15
20
2。REGEXP

[0-9]+
2。解释

[0-9] <= Numbers
+ <= 1 or more
结果:

\d+ 
\d =>numbers
+ => 1 or more
30-01-2003 15:20
30
01
2003
15
20
享受


请参阅:

,因为
是贪婪的匹配。它将尝试消耗尽可能多的能量。因此,如果存在一个
\d
,它将始终抓住它

将末尾的
看作定义了两个正则表达式:
\d[^\w]\d
\d[^\w]
。在您的测试用例中,您永远不会有第一个正则表达式不匹配而第二个正则表达式不匹配的匹配(没有重叠,这也是贪婪的)。这就是为什么你的比赛永远不会改变。但是,如果您将测试用例更改为:

30-01-2003 15:20/

根据您是否在正则表达式末尾包含问号,您将获得额外的
0/

因为
是贪婪匹配。它将尝试消耗尽可能多的能量。因此,如果存在一个
\d
,它将始终抓住它

将末尾的
看作定义了两个正则表达式:
\d[^\w]\d
\d[^\w]
。在您的测试用例中,您永远不会有第一个正则表达式不匹配而第二个正则表达式不匹配的匹配(没有重叠,这也是贪婪的)。这就是为什么你的比赛永远不会改变。但是,如果您将测试用例更改为:

30-01-2003 15:20/

根据是否在正则表达式末尾包含问号,您将获得额外的
0/
匹配。

您的第一个和第三个案例产生与原始案例相同的结果,只是因为您正在搜索的特定字符串-它们通常不是等价的搜索。具体地说,字符串中出现的每一个
\d[^\w]
后面都紧跟着一个数字,因此将尾随数字设置为可选不会更改任何匹配项。同样,每次出现的
[^\w]\d
前都会有一个数字。如果您的字符串有两个空格,或者某个地方有一个双标点符号,则每种情况下的结果都会不同。

您的第一个和第三个情况产生与原始情况相同的结果,只是因为您正在搜索的特定字符串-它们通常不是等价的搜索。具体地说,字符串中出现的每一个
\d[^\w]
后面都紧跟着一个数字,因此将尾随数字设置为可选不会更改任何匹配项。同样,每次出现的
[^\w]\d
前都会有一个数字。如果您的字符串有两个空格,或者某个地方有一个双标点符号,则每种情况的结果都会不同。

如果您不知道,可以很好地解析和解释正则表达式。谢谢。如果你不知道的话,我会检查一下,很好地解析和解释正则表达式。谢谢。我会检查你是否(某种程度上)解释了\d+,这不是问题的内容。我在解释如何捕捉数字,如果你不符合条件,当我试图帮助知识时,去激励它。虽然你(某种程度上)解释了\d+,但这不是问题的内容。我在解释如何捕捉数字,如果你的条件是否定的,当我试图帮助知识的时候,去激励我去做它。
*
也贪婪吗?是的。要使它们具有所有格而不是贪婪,请在它们后面加上
+
,例如
?+
*+
*
也贪婪吗?是的。要使它们具有占有欲而不是贪婪,请在它们后面加上
+
,例如
?+
*+