Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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.UNIX_行_Java_Regex - Fatal编程技术网

带有Java的正则表达式中的Pattern.UNIX_行

带有Java的正则表达式中的Pattern.UNIX_行,java,regex,Java,Regex,您好,这里是java文档中的以下内容: UNIX\u行 public static final int UNIX\u行 启用Unix行模式 在这种模式下,只有'\n'行终止符在 、^和$的行为 Unix行模式也可以通过嵌入式标志表达式启用 (?d) 有人用别的词来定义它的作用吗?我知道“\n”转义序列只有在、^和$之后才能识别。 显然我被误解了。我将尝试在上解释它,因为同样的规则适用于^和$ 通常点匹配除新行以外的所有字符。在Unix中,只有\n是新行标记,因此其他字符,如回车\r将被视为普通字

您好,这里是java文档中的以下内容:

UNIX\u行

public static final int UNIX\u行

启用Unix行模式

在这种模式下,只有
'\n'
行终止符在
^
$
的行为

Unix行模式也可以通过嵌入式标志表达式启用
(?d)

有人用别的词来定义它的作用吗?我知道“\n”转义序列只有在
^
$
之后才能识别。 显然我被误解了。

我将尝试在
上解释它,因为同样的规则适用于
^
$

通常点
匹配除新行以外的所有字符。在Unix中,只有
\n
是新行标记,因此其他字符,如回车
\r
将被视为普通字符

看看这个字符串
“a\r\nB\rC\nD”
。如果您试图使用

String data = "A\r\nB\rC\nD";
System.out.println(data);
Matcher m = Pattern.compile(".+").matcher(data);
while (m.find()) {
    System.out.println("["+m.group()+"]");
}
你会得到

[A]
[B]
[C]
[D]
但是如果添加flag
Pattern.UNIX\u行
字符,如
\r
也可能与
匹配,输出将更改为

[A
]
[B
C]
[D]

因此,第一个匹配项是
[A\r]
,第二个匹配项是
[B\rC]
,第三个匹配项是
[C]

,它们具体如何应用于正则表达式行为<代码>、
^
$
取决于换行功能的定义

  • 匹配除换行符以外的任何内容
  • ^
    可以匹配行首
  • $
    可以匹配行尾
这些都取决于行终止位置的正确定义。
UNIX\u line
设置指示它严格按照标准UNIX定义定义行终止符。默认情况下,它的定义更宽泛

至于匹配“abc\n”,我假设您使用的是
模式。匹配
或类似的东西,它们必须匹配整个输入<代码>^
$
为零宽度。它们可以在换行符的任意一侧匹配,但不会使用换行符。您可以通过简单地将
\n
放入您的模式中来使用
\n
,或者您也可以按照指示使用
$
字符,如
abc\n$
,或者如果您感到心情愉快
(?m)abc$$$$\n$


模式也可能对您有用,这取决于您试图完成的任务。

您可能也想参考。@devnull我可以举个简单的例子吗?我理解\n和\r等之间的区别,但当我尝试类似模式:“abc$”匹配引擎:“abc\n”时,它似乎不起作用