繁体   English   中英

简单的Java模式匹配问题?

[英]Simple java pattern matching issue?

我想测试一个字符串是否包含insertname以及任何中间字符。 如果可以的话,我想打印该比赛。

对于下面的代码,只有第三个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

只需使用多个正向先行:

(?=.*insert)(?=.*name).+

参见regex101.com上的演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM