我有一个模式使用^和$来表示行的开头和结尾。
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
答案 0 :(得分:9)
默认情况下,这些符号与整个输入序列的开头和结尾匹配。
进一步向下same Pattern class documentation(重点补充):
默认情况下,正则表达式^和$忽略行终止符,并且仅分别匹配整个输入序列的开头和结尾。如果激活MULTILINE模式,则^匹配输入的开始和任何行终止符之后,输入结束时除外。当处于MULTILINE模式时,$匹配在行终止符之前或输入序列的结尾。
所以你可以通过用Pattern.MULTILINE
编译模式来使^和$工作,因为它们在摘要表中有记录:
Pattern pattern = Pattern.compile( "^Key2 = (.+)$", Pattern.MULTILINE );