在java正则表达式中使用Pattern.MULTILINE
由此: 多行在java正则表达式中使用Pattern.MULTILINE,java,regex,Java,Regex,由此: 多行 public static final int MULTILINE 启用多行模式。在多行模式下,表达式^和$分别在行终止符或输入序列结尾之后或之前匹配。默认情况下,这些表达式仅在整个输入序列的开头和结尾匹配 还可以通过嵌入式标志表达式(?m)启用多行模式 有人能举一个真实的代码示例,说明使用Pattern.MULTILINE和标准设置创建模式的区别吗 如教程所述,默认情况下,边界匹配器应匹配行首和行尾 通过使用模式.MULTILINE,它会改变什么?人为的示例:要匹配Java源文件
public static final int MULTILINE
启用多行模式。在多行模式下,表达式^
和$
分别在行终止符或输入序列结尾之后或之前匹配。默认情况下,这些表达式仅在整个输入序列的开头和结尾匹配
还可以通过嵌入式标志表达式(?m)
启用多行模式
有人能举一个真实的代码示例,说明使用Pattern.MULTILINE
和标准设置创建模式的区别吗
如教程所述,默认情况下,边界匹配器应匹配行首和行尾
通过使用
模式.MULTILINE
,它会改变什么?人为的示例:要匹配Java源文件中的特定导入行,请执行以下操作:
import foo.bar.Baz;
为了匹配输入中的任意行(即多行),更简单的解决方案是使用Pattern.multiline
以及以下正则表达式:
^\s*import\s+foo\.bar\.Baz\s*;\s*$
在这里,^
将在换行符之后匹配,$
将在换行符之前匹配。这在这种情况下是可取的
以及:
如本教程所述,默认情况下,边界匹配器^应匹配行首和行尾
这是不真实的。默认情况下,^
匹配输入的开头,$
匹配输入的结尾
说明:
public static void main(final String... args)
{
final Pattern p1 = Pattern.compile("^dog$");
final Pattern p2 = Pattern.compile("^dog$", Pattern.MULTILINE);
final String input = "cat\ndog\nTasmanian devil";
System.out.println(p1.matcher(input).find());
System.out.println(p2.matcher(input).find());
}
这将产生:
false
true
因此,我链接的oracle教程(在您引用的后一位中)是错误的?\A和^then之间有什么区别?区别在于
\A
将始终匹配输入的开头,即使使用模式。多行
。在上面的第二个正则表达式中,如果将^
替换为\A
,则第二个打印输出将为false
。