我有以下代码:
public class testMatch {
public static void main(String[] args) {
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = "3";
if (dummyMessage.matches(expression)){
System.out.println("MATCH!");
} else {
System.out.println("NO MATCH!");
}
}
}
我希望这是一个成功的匹配,因为dummyMessage包含表达式3但是当我运行这个代码片段时,代码打印出NO MATCH!
我不知道我做错了什么。
好的停止回答! 。* 3. *作品 这是一个过度简化我在一些实时代码中的问题,正则表达式是可配置的,直到现在匹配整个字符串已经没问题,我现在必须匹配字符串的一部分,并想知道为什么它不是工作。
答案 0 :(得分:9)
它与整个字符串匹配,即在大多数其他正则表达式实现中与^3$
类似。因此3
与例如333
不符.*3.*
或您的字符串。但dummyMessage.contains(expression)
可以胜任。
但是,如果您只想测试字符串中是否包含“3”,则根本不需要正则表达式。请改用{{1}}。
答案 1 :(得分:3)
String#matches(regex)判断此字符串是否与给定的正则表达式匹配。 你的字符串dummyMessage与表达式不匹配,因为它试图检查dummyMessage是否为3你可能需要String.contains(charseq)。
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = "3";
if (dummyMessage.contains(expression)){
System.out.println("MATCH!");
} else {
System.out.println("NO MATCH!");
}
答案 2 :(得分:2)
您应该匹配matches
的整个字符串以返回true。也许尝试使用.*3.*
。
答案 3 :(得分:2)
它将匹配此类正则表达式:.*3.*
答案 4 :(得分:2)
使用contains(表达式)
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = "3";
if (dummyMessage.contains(expression)) {
System.out.println("MATCH!");
} else {
System.out.println("NO MATCH!");
}
答案 5 :(得分:1)
默认情况下String#matches()
测试字符串是否完全匹配正则表达式。为了使它工作替换
expression = "3"
与
expression = ".*3.*"
匹配字符串中的子字符串使用Matcher#find()
方法。
答案 6 :(得分:1)
你的正则表达式应该是.*3.*
答案 7 :(得分:1)
String类的matches()方法检查整个字符串是否匹配。 我将您的代码修改为:
public class testMatch
{
public static void main(String[] args)
{
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = ".*3.*";
if (dummyMessage.matches(expression))
{
System.out.println("MATCH!");
}
else
{
System.out.println("NO MATCH!");
}
}
}
现在可行了
答案 8 :(得分:1)
您可能正在寻找matcher.find
:
String message = "asdfasdfsadfsadfasdf 3 sdfasdf3asdfasdf";
String expression = "3";
// Really only need to do this once.
Pattern pattern = Pattern.compile(expression);
// Do this once for each message.
Matcher matcher = pattern.matcher(message);
if (matcher.find()) {
do {
System.out.println("MATCH! At " + matcher.start() + "-" + matcher.end());
} while ( matcher.find() );
} else {
System.out.println("NO MATCH!");
}
答案 9 :(得分:0)
相应地更改原始正则表达式 - 它当前不正确且不匹配:
String expression = "(.*)3(.*)";
或者只使用String.contains() - 我认为这更适合这种情况。
答案 10 :(得分:0)
你要么这样做:
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = "3";
Pattern p = Pattern.compile(".*3.*");
Matcher m = p.matcher(dummyMessage);
boolean b = m.matches();
if (b) {
System.out.println("MATCH!");
}
else {
System.out.println("NO MATCH!");
}
或者这样:
String dummyMessage = "asdfasdfsadfadfasdf 3 sdfasdfasdfasdf";
String expression = "3"
if (dummyMessage.contains(expression)) {
System.out.println("MATCH!");
}
else {
System.out.println("NO MATCH!");
}