如何编写一个与新行和空格分隔的多行匹配的正则表达式?
以下代码适用于一条多线,但如果输入则不起作用 是
String input = "A1234567890\nAAAAA\nwwwwwwww"
我的意思是matches()
不适用于输入。
这是我的代码:
package patternreg;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class pattrenmatching {
public static void main(String[] args) {
String input = "A1234567890\nAAAAA";
String regex = ".*[\\w\\s\\w+].*";
Pattern p = Pattern.compile(regex,Pattern.MULTILINE);
Matcher m =p.matcher(input);
if (m.matches()) {
System.out.println("matches() found the pattern \""
+ "\" starting at index "
+ " and ending at index ");
} else {
System.out.println("matches() found nothing");
}
}
}
答案 0 :(得分:1)
您还可以添加DOTALL标志以使其正常工作:
Pattern p = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL);
答案 1 :(得分:0)
我相信你的问题是。*是贪婪的,所以它匹配字符串中的所有其他'\ n'。
如果你想坚持上面的代码,试试:“[\ S] * [\ s] +”。这意味着匹配零个或多个非空白字符,后跟一个或多个空格字符。
修正了代码:
public static void main(String[] args) {
String input = "A1234567890\nAAAAA\nsdfasdf\nasdfasdf";
String regex = "[\\S]*[\\s]+";
Pattern p = Pattern.compile(regex, Pattern.MULTILINE);
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println(input.substring(m.start(), m.end()) + "*");
}
if (m.matches()) {
System.out.println("matches() found the pattern \"" + "\" starting at index " + " and ending at index ");
} else {
System.out.println("matches() found nothing");
}
}
输出:
A1234567890 * AAAAA * sdfasdf * matches()一无所获
另外,
的模式
"([\\S]*[\\s]+)+([\\S])*"
将匹配整个输出(匹配器返回true)但会弄乱代码的令牌部分。