2017-06-03 47 views
2

我已經包含多行字符串,我想找到在多行,例如一個特定的模式如何在一個字符串匹配字包含使用Java的模式匹配多行

String s = "foo\r\nbar\r\nfoo" 
       + "foo, bar\r\nak + " 
       + "foo, bar\r\nak + " 
       + "bar, bar\r\nak + " 
       + "blr05\r\nsdfsdkfhsklfh"; 

上面的字符串是一個多字符串中,我想找到「AK」,並得到了它+之後的下一個詞在我的例子其foo,bar,blr05

爲此,我創建模式Pattern.compile("^ak\\s*+\\s*(\\w+)"),但它不是在matcher.find()工作本身返回false。

回答

2

默認情況下,正則表達式只能匹配單行內的文本。有兩種修改方法。因此,這將滿足你一個解決辦法是寫

Pattern.compile("^ak\\s*+\\s*(\\w+)", Pattern.MULTILINE); 

添加額外的參數給你一個Pattern,將跨多行匹配。

更新
作爲SLN指出,原來的正則表達式沒有多大意義,因爲+*。你的意思可能是"^ak\\s*\\+\\s*(\\w+)" - 也就是說,逃避+使其成爲文字。

+0

第二種方法是什麼? –

+1

將'(?m)'添加到表達式的前面。但我不喜歡這樣做 - 第二個論點的意義更爲明顯。 –

+0

如果plus是一個文字,你必須逃避它。 – sln