簡體   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