以下代码匹配两个表达式并打印成功。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String regex = "\\{user_id : [0-9]+\\}";
String string = "{user_id : 0}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
if (matcher.find())
System.out.println("Success.");
else
System.out.println("Failure.");
}
}
但是,我希望空白无关紧要,因此以下内容也应该打印成功。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String regex = "\\{user_id:[0-9]+\\}";
String string = "{user_id : 0}";
Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
Matcher matcher = pattern.matcher(string);
if (matcher.find())
System.out.println("Success.");
else
System.out.println("Failure.");
}
}
Pattern.COMMENTS标志应该允许空格,但会导致无法打印。如果字符串完全等效,包括空格,它甚至会导致打印失败,如第一个示例中所示。例如,
import java.util.regex.Matcher; import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String regex = "\\{user_id : [0-9]+\\}";
String string = "{user_id : 0}";
Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
Matcher matcher = pattern.matcher(string);
if (matcher.find())
System.out.println("Success.");
else
System.out.println("Failure.");
}
}
打印失败。
为什么会发生这种情况?如何使模式忽略空格?
答案 0 :(得分:9)
你身边存在误解。 Pattern.COMMENTS
允许你在你的正则表达式中添加额外的空格,以提高正则表达式的可读性,但是这个空格不会在字符串中匹配。
这不允许字符串中的空格,然后自动匹配,而不在正则表达式中定义。
示例强>
使用Pattern.COMMENTS
,你可以在你的正则表达式中添加空格
String regex = "\\{ user_id: [0-9]+ \\}";
改善readablitiy,但它不匹配字符串
String string = "{user_id : 0}";
因为你没有在字符串中定义空格,所以如果你想使用Pattern.COMMENTS
那么你需要特别处理你想要匹配的空格,要么你要逃避它
String regex = "\\{ user_id\\ :\\ [0-9]+ \\}";
或者您使用空白类
String regex = "\\{ user_id \\s:\\s [0-9]+ \\}";