Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java正则表达式中使用Pattern.MULTILINE_Java_Regex - Fatal编程技术网

在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