[英]Simple java pattern matching issue?
我想测试一个字符串是否包含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));
尝试使用这样的组.*(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
您只需要在代码中使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.