我有在 .NET 中匹配但在 Java 中不匹配的正则表达式。我认为 Java 版本是正确的,所以我想知道如何在 .NET 中复制此功能。
这是模式:
([12AB]?)[: ]*(Mo|Mn|M|Tu|We|Wd|W|Th|Fr|F|Sa|Su)(\w*)[: ]*(\w*)[: ]*(\w*)
这是测试字符串:
D1:AM
这是一个工作示例:RegEx Fiddle
单击 Java 以查看 Java 的结果:
点击 .NET 的结果:
我有在 .NET 中匹配但在 Java 中不匹配的正则表达式。我认为 Java 版本是正确的,所以我想知道如何在 .NET 中复制此功能。
这是模式:
([12AB]?)[: ]*(Mo|Mn|M|Tu|We|Wd|W|Th|Fr|F|Sa|Su)(\w*)[: ]*(\w*)[: ]*(\w*)
这是测试字符串:
D1:AM
这是一个工作示例:RegEx Fiddle
单击 Java 以查看 Java 的结果:
点击 .NET 的结果:
.matches()
没有什么区别,只是再次说明您是 Java 错误命名方法的另一个受害者。正则表达式匹配可以发生在输入的任何地方,如果你想匹配,比如说,只在输入的开头,你必须明确地告诉正则表达式引擎。
如果您再次查看您粘贴的图像,您将看到.find()
Java 返回 true,与.Match()
.NET 相同。Java.find()
进行真正的正则表达式匹配,.NET 的.Match()
.
Java 在这里是错误命名的.matches()
,因为它在开头和结尾都锚定了正则表达式(旁注:.lookingAt()
仅在开头锚定)。如果您想在 .NET 中复制该行为,请锚定您的正则表达式:
^([12AB]?)[: ]*(Mo|Mn|M|Tu|We|Wd|W|Th|Fr|F|Sa|Su)(\w*)[: ]*(\w*)[: ]*(\w*)$
(但从您的屏幕截图来看,您似乎使用了另一个正则表达式,而不是您引用的那个:上面的正则表达式既不匹配D1:AM
也不D1:PM
匹配)