2014-10-22 96 views
1

我新的Java和正則表達式空間在Java正則表達式

我要檢測像 第一種模式:

我有一個代碼片段

String line = "Section 12: sadfdggfgfgf"; 
    Pattern ptn = Pattern.compile("Section [0-9+]:"); 
    Matcher mtch = ptn.matcher(line); 

當PTN = 「段[0-9 +]: MTCH是假

我能夠檢測圖案(MTCH說TRUE)時 PTN = 「部分[0-9 +]

有什麼我缺少關於字符串中的空格嗎? 我必須假設他們可能或不可能是空白部分和<Number>

回答

3

+放在字符類以外,以便它將匹配一個或多個數字。因爲沒有一個字符串Section後跟一個[0-9+]將只匹配在給定列表中的單個字符

Pattern ptn = Pattern.compile("Section [0-9]+:"); 

當你運行該"Section [0-9+]:"正則表達式,它返回false(從範圍0-9+位)單個數字或文字+再次跟在您原始字符串中的:(注意:您的原始字符串包含兩個數字後跟冒號Section 12: sadfdggfgfgf)。

"Section [0-9+]"返回true,因爲有一個字符串Section後跟一個數字。

1

您需要將quantifier放在角色等級後面。一個字符類定義了一組字符,其中任何一個都可以發生,以便匹配成功。目前,您正在匹配09,+的任何字符,恰好「一次」。

匹配返回的原因false您的冒號模式是因爲正則表達式引擎試圖在冒號前面有兩個數字的單個數字後匹配冒號。它之所以返回該模式真正沒有冒號是因爲正則表達式引擎能夠匹配遵循「節」

正確的語法是單號:

Section [0-9]+: 

此相匹配「部分「後跟空格字符,然後是09」一個或多個「時間和冒號的任何字符。

0

如果你想接受任何號段和號碼之間串的,試試這個正則表達式:

Pattern.compile("Section[\\s]*[\\d]+"); 

對於至少一個空間,使用此:

Pattern.compile("Section[\\s]+[\\d]+"); 

在Java正則表達式\ s匹配空格,\ d匹配一個數字。但是,由於反斜槓啓動了一個轉義序列,因此您必須避免反斜槓本身,這就是爲什麼最終會出現雙反斜槓。

你可以閱讀更多的和Java正則表達式和模式類在這裏:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

0
Section\s*[0-9]+: 

你可以用這個來確保這無論space在那裏與否sectionnumber之間的匹配。

+0

Would Section \ s * [0-9] + \ s *:處理數字和冒號之間可能有任意數量空格的情況? – PW1981 2014-10-22 13:59:36

+0

Section \\ s * [0-9] + \\ s * works – PW1981 2014-10-22 14:03:13

+0

@ PW1981 Section \ s * [0-9] + \ s *:'這將處理所有空間相關的情況。 – vks 2014-10-22 14:34:06