gpt4 book ai didi

java - 比较 2 个正则表达式字符串

转载 作者:行者123 更新时间:2023-12-02 05:41:09 24 4
gpt4 key购买 nike

我正在编写一个迁移实用程序,其中一个转换的一部分是测试一对正则表达式。例如,一些测试将是:

+-------+-------+-------+
| Left | Right | Match |
+-------+-------+-------+
| (.)01 | 101 | Yes |
+-------+-------+-------+
| (.)02 | 101 | No |
+-------+-------+-------+
| 101 | 101 | Yes |
+-------+-------+-------+
| 201 | (.)01 | Yes |
+-------+-------+-------+
| (.)01 | 2(.)1 | Yes |
+-------+-------+-------+

目前,我的测试使用 .matches 逐一进行测试,当只有一侧是正则表达式,但当两侧都有一个(即最后一行)时,该方法有效。例如),当它应该返回 true 时,它​​返回 false。

那么,如何才能获得最后一个示例的肯定比较结果?

最佳答案

您使用的正则表达式是错误的。您应该使用正则表达式将字符串与给定的正则表达式进行匹配,而不是相互测试正则表达式。

正则表达式表示一组可能的匹配:(.)01 匹配 a01301$01等等等等...

因此,当您将该集合中的一项(例如$01)与正则表达式匹配时,这样做是有意义的。

在你的最后一个例子中,你试图将正则表达式与正则表达式进行匹配,这很愚蠢。哪个正则表达式是您的源,哪个字符串是您的目标?如果第一个正则表达式是您的源,则 201 匹配它,但也匹配 101#01 等...但这根据第二个正则表达式,它匹配 201 等项目,但也匹配 2#1291。因此,不应将它们视为“彼此匹配”。

看看这个维恩图:

enter image description here

您的上一场正则表达式比赛有两个正则表达式互相争斗。第一个正则表达式由圆圈 A 表示。第二个正则表达式由圆圈 B 表示。

有一些元素(好吧,就是201)同时位于圆A和圆B中(由深色A和B指出)。您认为这些圆圈是匹配的吗?我当然不这么认为。如果他们完全覆盖彼此,我会的。

但是这些圆圈完全相互覆盖的唯一方法(意味着圆圈 A 中的所有内容都在圆圈 B 中,圆圈 B 中的所有内容都在圆圈 A 中),那就是两个正则表达式完全相同!就像(.)01和......(.)01!这是唯一可能的匹配,但如果您将其中一个视为正则表达式,将另一个视为字符串,它仍然无法工作。

编辑如果您只想查找这是否至少是一个常见匹配项,这可能会有所帮助:https://stackoverflow.com/a/17957180/1283166

关于java - 比较 2 个正则表达式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24509627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com