[英]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.