gpt4 book ai didi

c# - 如果仅重复一组符号,如何使正则表达式匹配?

转载 作者:行者123 更新时间:2023-11-30 09:15:27 24 4
gpt4 key购买 nike

我需要一个可以匹配日期的正则表达式。但是,日、月和年的分隔符可能不同。它可能是点、破折号、斜杠...

我有的是

^([012]?[1-9]|3[01])[\\.\\-\\/\\\\](0?[1-9]|1[012])[\\.\\-\\/\\\\](19|20)\\d{2}$

原来如此

([012]?[1-9]|3[01]) --the day part
(0?[1-9]|1[012]) --the month part
(19|20)\\d{2} --the year part

分隔符重复两次,根据我当前的表达式 [\\.\\-\\/\\\\],可能会有所不同...我的意思是,它匹配,说:

01.01-1986

虽然我希望它仅在有两个点、两个破折号或分隔符部分允许的两个时才匹配...因此上面给出的示例不应匹配。

我想这可以通过正则表达式的分组模式以某种方式完成。但我不知道如何应用它。我也发现自己完全不知道如何用谷歌搜索这个......

谁能把我推向正确的方向?


P.S.:我最近看了SO Regular Expression to match valid dates ...在我的情况下,我知道它会匹配没有它的月份中的第 31 天,以及 2 月缺席的所有日子...没关系...


在 Java 中,我目前使用以下代码:

String value = "31/12/2086";
String pattern = ...
boolean result = value.matches(pattern);

在 C# 中

string value = "01.01.2014";
string pattern = "";
bool result = Regex.IsMatch(value, pattern);

如果有办法做我想做的事,如果解决方案适用于这两种语言,那就太好了... Are Java and C# regular expressions compatible?

最佳答案

您可以在正则表达式中使用 \\x,其中 x 是组号。它表示与 x 组匹配的相同字符串。所以在你的情况下你可以使用类似

someRegex([.\\-/\\\\])someOtherRegex\\1anotherRegex
^^^^^^^^^^^ ^^^
group 1 here should appear same string as in group 1

例子

String regex = "someRegex([.\\-/\\\\])someOtherRegex\\1anotherRegex";
System.out.println("someRegex.someOtherRegex.anotherRegex".matches(regex));
System.out.println("someRegex.someOtherRegex-anotherRegex".matches(regex));
System.out.println("someRegex-someOtherRegex-anotherRegex".matches(regex));

输出:

true
false
true

关于c# - 如果仅重复一组符号,如何使正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897916/

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