Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单的java模式匹配问题?_Java_Regex - Fatal编程技术网

简单的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