简单的java模式匹配问题?
我想测试字符串是否包含简单的java模式匹配问题?,java,regex,Java,Regex,我想测试字符串是否包含插入和名称,以及任何中间字符。如果有,我想打印匹配 对于下面的代码,只有第三个模式匹配,并且打印整行。如何仅匹配插入…名称 String x = "aaa insert into name sdfdf"; Matcher matcher = Pattern.compile("insert.*name").matcher(x); if (matcher.matches()) System.out.print(matcher.group
插入
和名称
,以及任何中间字符。如果有,我想打印匹配
对于下面的代码,只有第三个模式
匹配,并且打印整行。如何仅匹配插入…名称
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).+
请参阅。尝试像这样使用组
*(插入。*名称)。*
或者在您的情况下,您可以使用:
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()
允许您匹配输入中任何地方的正则表达式
还建议您使用*?
而不是*
,以防您的输入可能包含多个索引实例。。。名称
对
此代码示例将输出:
insert into name
为什么不直接使用
insert.*name
的可能重复项?如果匹配,它在字符串中。如果是这样,为什么不只匹配insert.*name
?@ctwheels如果使用insert.*name
预期结果是什么?预期结果将是:insert into name
@ctwheels已经是anubhava了,请按照您在回答中所说的去做';(,但我还是想采用第二种解决方案instead@ab11您可以在模式本身内启用/禁用标志:insert(?.s)。*(?-s)name
或只使用[\s\s]
而不是
insert into name