Pattern pattern = Pattern.compile("\\d{4}\\s+[a-z|A-Z]{2}\\s+PLAIN\\sTEXT\\s+(.*?)\\(NS\\)");
Matcher matcher = pattern.matcher("2007 AL PLAIN TEXT ap2345 (NS)");
while (matcher.find())
{
System.out.println(matcher.group(1));
}
我希望它的工作input1 = 2007 AL PLAIN TEXT ap2345 (NS)
(上述正則表達式確實爲此工作),但它失敗了input2 = "ap2345"
。我想要捕獲這兩個字符串在同一個組號碼,這意味着我需要使以前的捕獲可選。我怎樣才能做到這一點?我如何製作一組可選的捕捉模式並捕捉相同的組號碼?
編輯:::我想同樣的組號碼爲工作時,雙方的字符串值2007 AL PLAIN TEXT ap2345 (NS)
OR ap2345
目前'ap2345'位是可選的(。*?)',它應該真的是可選的嗎? – ddmps 2013-04-08 22:31:36
@Pescis'。*?'不是可選的'。*',但它是不情願的量詞,這將使正則表達式找到最小匹配。就像'ababab'正則表達式一樣''(ab)*'會匹配'ababab',但是當我們使用'(ab)*?'時,它只會匹配'ab'。 – Pshemo 2013-04-08 22:39:38
@Phoenix我不太明白你的問題。你是否試圖讓「2007 AL PLAIN TEXT」可選,但不改變組號碼? – Pshemo 2013-04-08 22:41:55