匹配单个出现的字符

时间:2017-10-11 06:26:38

标签: java regex

我有两个这样的字符串:"A == B", "C = D"。我想知道字符串是否包含赋值运算符=或等于==运算符。例如,"C=D"应返回true,"C=D=D"也应返回true。但是"A==B"应该返回false。我试过"[^=][=][^=]",但两个字符串都返回false。

Pattern pattern = Pattern.compile("[^=][=][^=]");
Matcher matcher = pattern.matcher("A=B");

System.out.println(matcher.matches());

这将返回false,但我想获得true

4 个答案:

答案 0 :(得分:3)

在Java中,Matcher.match()将尝试匹配整个字符串。要在中间找到子字符串,您应该使用Matcher.find()代替。

Pattern pattern = Pattern.compile("[^=][=][^=]");
Matcher matcher = pattern.matcher("A=B");

System.out.println(matcher.find());

对于任何仅包含true的字符串,这将返回'='。并且会为包含false的字符串返回'=='

答案 1 :(得分:1)

如果!myString.contains("==")没有true,您只需myString即可返回==。如果您想保证至少有一个=,那么

myString.contains("=") && !myString.contains("==")

答案 2 :(得分:1)

相应的正则表达式为"[^=]+=[^=]+",假设您允许在=符号之前和之后的任何长度和空格。

jshell> "A=B".matches("[^=]+=[^=]+")
$6 ==> true

jshell> "Ad=Bd".matches("[^=]+=[^=]+")
$7 ==> true

jshell> "Ad==Bd".matches("[^=]+=[^=]+")
$8 ==> false

$jshell> "A==B".matches("[^=]+=[^=]+")
$9 ==> false

jshell> "A cow = an animal".matches("[^=]+=[^=]+")
$10 ==> true

jshell> "    =     ".matches("[^=]+=[^=]+")
$11 ==> true

jshell> "=".matches("[^=]+=[^=]+")
$12 ==> false

jshell> "A==B && A=B".matches("[^=]+=[^=]+")
$13 ==> false

虽然给出了最后一个例子,但我想知道使用像XTextANTLR这样的工具是否更好,它们可以更好地解析表达式。

答案 3 :(得分:0)

尝试再次建立正则表达式。使用https://regexr.com来解决它。您只模式匹配“A = B”“C = D”“= A = B”并将其更改为“[^ =] [=] [^ =] [=] [^ =]”将使其识别“A” = B = C“和”A = F = R“或”= A = B = C“。因此,请检查您的正则表达式。 enter image description here