簡體   English   中英

需要正則表達式來匹配字符串

[英]Need Regex to match a String

我是Java新手。 我需要一個正則表達式來匹配具有這種模式的字符串:

[0-9].[0-9].[0-9]

例如,正則表達式應嚴格匹配5.5.04.6.55.2.2

上面的模式匹配像135.9.0這樣的字符串,它將輸出為5.9.0

但是我不想匹配這種模式。

我應該能夠完全匹配由句點(。)符號分隔的三個數字。

作為. 是正則表達式中的元字符,請像\\.一樣將其轉義\\. 因此表達

[0-9]\.[0-9]\.[0-9]

這可以簡化為

\d\.\d\.\d

甚至

(\d\.){2}\d

這將匹配以分隔的任意3位數字.

另請注意,如果要從"string 5.9.0"提取5.9.0 ,請使用上面的正則表達式。 但是,如果要從"5.9.0" (整個字符串,用於某種驗證)中完全匹配5.9.0 ,則應在開頭使用^ ,在末尾使用$ 所以它會像

^(\\d\\.){2}\\d$

最后(由於您的問題非常不清楚,是要匹配一位數字還是要匹配數字序列),要匹配數字序列,請使用[0-9]+而不是[0-9]\\d+而不是\\d

由於點與正則表達式中的每個字符都匹配,因此應使用反斜杠轉義點。
您應在正則表達式的開頭添加一個脫字符號(^),在正則表達式的末尾添加一個美元符號,以將匹配項限制為整個字符串而不是整個字符串的一部分(如果字符串包含您不想要的內容,則可能會匹配)。

^[0-9]\.[0-9]\.[0-9]$

或通過使用匹配預定義的前綴/后綴或開頭的非數字(僅當您的字符串開頭可能有數字以外的其他字符時,否則使用以上命令):

[^0-9]

這個正則表達式可以

\b\d\.\d\.\d\b

\\d匹配一個數字,即0-9

. 需要使用\\進行轉義,否則它將與任何字符匹配

正則表達式下面將執行您想要的操作:-

\b\d+\.\d+\.\d+\b
  • \\d匹配任何數字。

如果你只是想匹配single相隔 . 您可以使用: -

\b\d\.\d\.\d\b
  • \\b用於邊界檢查。

嘗試以下代碼:-

String str = "5.0.0 abc 5.6.7 abc 12.45.65 From: 133.5.0<pos1.002otak.com>";

Pattern pattern = Pattern.compile("\\b\\d\\.\\d\\.\\d\\b"); 
Matcher match = pattern.matcher(str);

while (match.find()) {
    System.out.println(match.group(0));
}

OUTPUT

5.0.0
5.6.7
// 12.45.65 is not printed

更新 :-

要在abc1.4.5def而不是121.4.546匹配1.4.5121.4.546使用以下模式:-

[^\\d](\\d\\.\\d\\.\\d)[^\\d]

你可以使用:

^\d\.\d.\d$

要么

\b\d\.\d.\d\b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM