我想测试一个字符串是否包含insert
和name
,以及任何中间字符。如果确实如此,我想打印比赛。
对于以下代码,只有第三个Pattern
匹配,并且打印整行。我怎样才能匹配insert...name
?
String x = "aaa insert into name sdfdf";
Matcher matcher = Pattern.compile("insert.*name").matcher(x);
if (matcher.matches())
System.out.print(matcher.group(0));
matcher = Pattern.compile(".*insert.*name").matcher(x);
if (matcher.matches())
System.out.print(matcher.group(0));
matcher = Pattern.compile(".*insert.*name.*").matcher(x);
if (matcher.matches())
System.out.print(matcher.group(0));
答案 0 :(得分:1)
尝试使用此类.*(insert.*name).*
Matcher matcher = Pattern.compile(".*(insert.*name).*").matcher(x);
if (matcher.matches()) {
System.out.print(matcher.group(1));
//-----------------------------^
}
或者你可以使用:
x = x.replaceAll(".*(insert.*name).*", "$1");
他们都打印:
insert into name
答案 1 :(得分:1)
您只需在代码中使用find()
代替matches()
:
String x = "aaa insert into name sdfdf";
Matcher matcher = Pattern.compile("insert.*?name").matcher(x);
if (matcher.find())
System.out.print(matcher.group(0));
matches()
希望您匹配整个输入字符串,而find()
可让您在输入中的任何位置匹配正则表达式。
还建议您使用.*?
代替.*
,以防您的输入可能包含index ... name
对的多个实例。
此代码示例将输出:
insert into name
答案 2 :(得分:0)