正则表达式分组行为异常
Regex Grouping behaves abnormally
我需要识别像 xxx.xxx
这样的数字 第一个数字是可选的,它可以是 0
或 1
。第二个也是可选的,可以是0
到9
。第三个应该是 0
到 9
.
所以我使用正则表达式 ([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]
,您实际上匹配字符 0
、1
和 字符 |
。所以你的模式会匹配输入 likes
|13.|13 // Matches
有多个站点可以测试正则表达式,并附有解释,例如 regex101。这是您的示例 regex101/r/f1ytVE.
我需要识别像 xxx.xxx
这样的数字 第一个数字是可选的,它可以是 0
或 1
。第二个也是可选的,可以是0
到9
。第三个应该是 0
到 9
.
所以我使用正则表达式 ([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]
,您实际上匹配字符 0
、1
和 字符 |
。所以你的模式会匹配输入 likes
|13.|13 // Matches
有多个站点可以测试正则表达式,并附有解释,例如 regex101。这是您的示例 regex101/r/f1ytVE.