gpt4 book ai didi

java - 正则表达式分组行为异常

转载 作者:行者123 更新时间:2023-11-29 08:29:58 29 4
gpt4 key购买 nike

我需要识别像 xxx.xxx 这样的数字 第一个数字是可选的,它可以是 01。第二个也是可选的,可以是09。第三个应该是09

所以我使用正则表达式,如 ([0|1]?[0-9]?[0-9])\\.\\1。但我看到了意想不到的行为

这是我的代码,

package HelloWorld;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.regex.*;
public class Practice
{
public static void main(String arg[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sample;
for(int i=0;i<6;i++)
{
sample = br.readLine();
if(Pattern.matches(MyRegex.pattern,sample))
{
System.out.println("true");
}
else
{
System.out.println("false");
}
}
}
}
class MyRegex
{
public static String pattern = "([0|1]?[0-9]?[0-9])\\.\\1";
}

对于输入,

000.12  => false
000.00 => false
000.000 => true
23.23 => trie

提前致谢。

最佳答案

\\1 命令不会不重复组内的正则表达式。它只会重复您之前捕获的文本。

所以它不等同于正则表达式

([0|1]?[0-9]?[0-9])\\.([0|1]?[0-9]?[0-9])

这就是为什么它只允许像 23.23 这样的重复,因为第二部分等于第一部分。

如果您想要重复正则表达式,则需要重新输入。显式或隐式 like

String part = "([0|1]?[0-9]?[0-9])";
String pattern = part + "\\." + part;

请注意,对于 [0|1],您可能指的是 [01][...] 中的所有内容都已被解释为 set

如果您使用[0|1],您实际上匹配字符01 字符|。所以你的模式会匹配输入喜欢

|13.|13 // Matches

有多个站点可以测试正则表达式,并附有解释,例如 regex101。这是你的例子 regex101/r/f1ytVE .

关于java - 正则表达式分组行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49176064/

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