2

您好,来自 java doc 的内容如下:

UNIX_LINES

public static final int UNIX_LINES

启用 Unix 行模式。

在这种模式下,在 、 和 的行为中只识别行'\n'终止符。.^$

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

有没有人有其他词来定义它的服务?我知道“\n”转义序列仅在.,^和. 之后被识别$。显然我被误解了。

4

2 回答 2

3

I will try to explain it on . since same rule apply for ^ and $.

Normally dot . matches every character except new line. In Unix only \n is new line mark, so other characters like carriage return \r are threated as normal characters.

Take a look at this String "A\r\nB\rC\nD". If you will try to find match for regex like.+ using

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()+"]");
}

you will get

[A]
[B]
[C]
[D]

but if add flag Pattern.UNIX_LINES characters like \r will also be possible match for . and output will change into

[A
]
[B
C]
[D]

So first match is [A\r], second [B\rC] and third [C]

于 2013-04-17T16:28:03.757 回答
2

至于它们如何专门应用于正则表达式行为;., ^, 并$取决于换行符的定义才能起作用。

  • .匹配除换行符以外的任何内容
  • ^可以匹配一行的开头
  • $可以匹配一行的结尾。

这些中的每一个都取决于对行终止位置的正确定义。该UNIX_LINES设置指示它根据标准 Unix 定义严格定义行终止符。默认情况下,它的定义更广泛,如 Pattern 文档中所示

至于匹配“abc\n”,我假设您正在使用Pattern.matches或类似的东西,它必须匹配整个输入? ^并且$是零宽度。它们可以匹配换行符的任一侧,但不会消耗换行符。您可以\n通过简单地将其放入您的模式中来使用 ,例如abc\n,或者您也可以$按照您的指示使用该字符,例如abc\n$,或者如果您感觉活泼(?m)abc$$$$\n$$

DOTALLMULTILINE模式也可能对您有用,具体取决于您要完成的工作。

于 2013-04-17T16:32:35.327 回答