2024-09-30 06:24:19 发布
网友
我有两个正则表达式。两者都匹配美国日期格式。以下是(我重点介绍了我谈论的小组):
^(.*?)((0|1)?\d)-((0|1|2|3)?\d)-**(19|20\d\d)**(.*?)$ ^(.*?)((0|1)?\d)-((0|1|2|3)?\d)-**((19|20)\d\d)**(.*?)$
两场比赛:
asasa12-12-1993.txt asassa12-12-2010.txt
在这本书中,他把19 | 20分为自己的一组。为什么?
我最好的猜测是人类更容易解析
第一个((19|20\d\d))并不表明交替是“19还是20\d\d”,而在((19|20)\d\d)中,很明显它是“19或20,然后是\d\d”
(19|20\d\d)
19
20\d\d
((19|20)\d\d
20
\d\d
AKX几乎是对的,但不仅仅如此
19|20\d\d将匹配19或20 followed by 2 digits
19|20\d\d
20 followed by 2 digits
但它将不匹配^{。
看看这里:https://regex101.com/r/lvYGUb/3
您将看到2010是单个匹配,而19是单独匹配的,没有93,因此93与.txt组匹配,这可能不是您想要的
93
.txt
以类似的方式,考虑这个数据文件:
20 euros 20 €
假设您希望使用正则表达式100%匹配这两行
\d+ euros|€不起作用,因为它表示a number followed by the word euros或just the € sign alone
\d+ euros|€
a number followed by the word euros
just the € sign alone
但是
\d+ (euros|€)将起作用
\d+ (euros|€)
因此,这里括号的目的不是捕获组,它们只是为OR运算符设置边界
如果不希望这些括号捕获组,可以添加?:使其成为非捕获组,如下所示:
?:
^(.*?)((0|1)?\d)-((0|1|2|3)?\d)-((?:19|20)\d\d)(.*?)$
我最好的猜测是人类更容易解析
第一个(
(19|20\d\d)
)并不表明交替是“19
还是20\d\d
”,而在((19|20)\d\d
)中,很明显它是“19
或20
,然后是\d\d
”AKX几乎是对的,但不仅仅如此
19|20\d\d
将匹配19
或20 followed by 2 digits
但它将不匹配^{。
看看这里:https://regex101.com/r/lvYGUb/3
您将看到2010是单个匹配,而19是单独匹配的,没有
93
,因此93与.txt
组匹配,这可能不是您想要的以类似的方式,考虑这个数据文件:
假设您希望使用正则表达式100%匹配这两行
\d+ euros|€
不起作用,因为它表示a number followed by the word euros
或just the € sign alone
但是
\d+ (euros|€)
将起作用因此,这里括号的目的不是捕获组,它们只是为OR运算符设置边界
如果不希望这些括号捕获组,可以添加
?:
使其成为非捕获组,如下所示:相关问题 更多 >
编程相关推荐