繁体   English   中英

Java 正则表达式检查

[英]Java Regular Expression check

我有代码

  String s = "The loading is completed, TB62 is bound for Chongqing, and trains 11-13 are expected";

    boolean matcher = Pattern.matches(".*11-13.*", s);
    System.out.println(matcher);

我只检查包含 11-13 及以上 workds 的字符串,但如果正则表达式是

.*1-13.*

这也适用于上述字符串。 如何更改它不会匹配的正则表达式.*1-13.*但只有.*11-13.*应该匹配

更新和添加更多信息,以便人们可以回答

我有两个正则表达式

.*11-13.*
.*1-1.*

但问题是什

.*1-1.*  also matches to the string 




String s = "The loading is completed, TB62 is bound for Chongqing, and trains 11-13 are expected";

它不应该匹配,因为我想正则表达式.*11-13.*只匹配。 我想我需要修改正则表达式

为此使用单词边界\b

Pattern.matches(".*\\b11-13\\b.*", s);

看看Pattern的 javadoc。

例如,如果您可以在文本中使用换行符,请在 compile 中使用DOT_ALL (点也是换行符),或者简单地使用find而不是match

代替匹配整个字符串的Pattern#matches ,您可以使用Matcher#find ,如下所示:

import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Main {
    public static void main(String[] args) {
        String s = "The loading is completed, TB62 is bound for Chongqing, and trains 11-13 are expected";
        Matcher matcher = Pattern.compile("\\b11-13\\b").matcher(s);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }

        // Alternatively
        Pattern.compile("11-13").matcher(s).results().map(MatchResult::group).forEach(System.out::println);
    }
}

Output:

11-13
11-13

注意: \b是一个边界匹配器 如果您需要任何一对由两位数字组成的连字符分隔的整数的正则表达式,您可以使用\b\d{2}-\d{2}\b作为正则表达式。

暂无
暂无

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

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