2017-06-03 23 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