Axe*_*xel 18 java regex formatter
我无法匹配时,通过使用所获得的含有换行符换行符字符串%n在Formatter对象或String.format().请看下面的程序:
public class RegExTest {
public static void main(String[] args) {
String input1 = String.format("Hallo\nnext line");
String input2 = String.format("Hallo%nnext line");
String pattern = ".*[\n\r].*";
System.out.println(input1+": "+input1.matches(pattern));
System.out.println(input2+": "+input2.matches(pattern));
}
}
Run Code Online (Sandbox Code Playgroud)
及其输出:
Hallo
next line: true
Hallo
next line: false
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?为什么第二个字符串不匹配?
Java版本是1.6.0_21.
Kep*_*pil 51
您可以设置Pattern.DOTALL标志以.匹配换行符,默认情况下不会.这是用(?s)符号完成的.所以,这个正则表达式做你想要的:
String pattern = "(?s).*[\n\r].*";
Run Code Online (Sandbox Code Playgroud)
Sto*_*ica 16
在Windows上,在Java中,\n是LF,\r是CR并且%n是CRLF.您的模式与后者不匹配.
从Java 8开始,您现在可以\R在正则表达式中使用以匹配任何行尾序列.
Linebreak matcher
\R任何Unicode换行序列都相当于\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
例:
String pattern = ".*\\R.*";
String.format("Hallo\nnext line").matches(pattern); // true
String.format("Hallo%nnext line").matches(pattern); // true
String.format("Hallo same line").matches(pattern); // false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29980 次 |
| 最近记录: |