正则表达式不适用于单个字符

时间:2018-09-11 05:41:07

标签: java regex

我正在尝试在Java中编写正则表达式,以计算两个用()分隔的字符串,

Example: (test1,test2)

我写了下面的代码

public static void main(String[] a){
    String pattern = "\\([a-zA-Z0-9]+,[a-zA-Z0-9]+.\\)";
    String test = "(test1,test2)";
    System.out.println(test.matches(pattern));
}

它按预期方式工作,在以下情况下会打印true

String test = "(test1,test2)";

String test = "(t,test2)";

但是当我在下面发送时,它正在打印false

String test = "(test1,t)";

这很奇怪,因为我在之前和之后使用相同的表达式,

它为true返回(t,test2),但不返回(test1,t)

请让我知道我在此正则表达式中缺少什么。我需要它来评估并返回true的{​​{1}}

7 个答案:

答案 0 :(得分:6)

您的正则表达式中不需要.(匹配一个字符)。从您的正则表达式中删除.,使其变为"\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)",它应该可以工作。

答案 1 :(得分:3)

使用此正则表达式:

String pattern = "^\\(.+,.+\\)";

这将与您所需的字符串匹配。

答案 2 :(得分:2)

在模式的第二部分,您有"[a-zA-Z0-9]+."

如果您尝试匹配"t",则t部分将看到[a-zA-Z0-9]+,但是之后需要另一个字符才能匹配.部分。

修改后的模式:"\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)"

答案 3 :(得分:2)

删除第二组[a-zA-Z0-9]之后的点

Demo

答案 4 :(得分:2)

更简单的是,您可以使用\ w代替单词,可以使用[a-zA-Z0-9]代替

所以您的正则表达式就是这样

\(\w+,\w+\)

答案 5 :(得分:2)

在您的正则表达式'。'中。在后一部分中不需要。 更改为“ \([a-zA-Z0-9] +,[a-zA-Z0-9] + \)”,这样它将对“(test,t)”返回true

String pattern = "\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)";
String test = "(te,t)";
System.out.println(test.matches(pattern)); // true

答案 6 :(得分:2)

String pattern = "\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)";
String test = "(test1,test2)";
String t1 = "(t,test2)";
String t2="(test2,t)";
System.out.println(test.matches(pattern));
System.out.println(t1.matches(pattern));
System.out.println(t2.matches(pattern));

只需尝试以下代码,它就会为您提供所需的答案。

您写了“。”在模式中+之后的末尾,请清除它。