正则表达式边界匹配器用于行开头(^)和行尾($)不起作用

时间:2015-10-22 16:48:14

标签: java regex

我有一个模式使用^和$来表示行的开头和结尾。

Pattern pattern = Pattern.compile( "^Key2 = (.+)$" );

并输入如下:

String text = "Key1 = Twas brillig, and the slithy toves"
  + "\nKey2 = Did gyre and gimble in the wabe."
  + "\nKey3 = All mimsy were the borogroves."
  + "\nKey4 = And the mome raths outgrabe.";

pattern.matcher( text ).find()会返回false

不应该这样吗?在Pattern class documentation中,摘要指定:

Boundary matchers
^  The beginning of a line
$  The end of a line

1 个答案:

答案 0 :(得分:9)

默认情况下,这些符号与整个输入序列的开头和结尾匹配。

进一步向下same Pattern class documentation(重点补充):

  

默认情况下,正则表达式^和$忽略行终止符,并且仅分别匹配整个输入序列的开头和结尾。如果激活MULTILINE模式,则^匹配输入的开始和任何行终止符之后,输入结束时除外。当处于MULTILINE模式时,$匹配在行终止符之前或输入序列的结尾。

所以你可以通过用Pattern.MULTILINE编译模式来使^和$工作,因为它们在摘要表中有记录:

Pattern pattern = Pattern.compile( "^Key2 = (.+)$", Pattern.MULTILINE );