我试图创建一个必须匹配这些模式的正则表达式:
\n 700000000123
我的意思是"\n"+"white space"+"12 digits"
所以我试过了:
(\\\\)(n)(\\s)(\\d{12})
或类似的东西:
(\\\\)(n)(\\s)(\\[0-9]{12})
但它仍然无法奏效。对我来说{12}意味着重复一个数字\d
或[0-9]
,12次?
我的想法是一个java代码,可以检查字符串是否包含此正则表达式:
Boolean result = false;
String string_to_match = "a random string \n 700000000123"
String re1="(\\\\)";
String re2="(n)";
String re3="(\\s)";
String re4="([0-9]{11})";
Pattern p = Pattern.compile(re1+re2+re3+re4, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
if (string_to_match.contains(p.toString()){
result = true;
}
我尝试使用:http://www.txt2re.com/来帮助我。
你有建议这个正则表达式的建议吗?我想了解为什么目前它不起作用。
答案 0 :(得分:1)
您需要使用String#matches
代替String#contains
来匹配正则表达式。
以下应该工作:
String re1="(\\n)";
String re2="( )";
String re3="(\\d{12})";
Pattern p = Pattern.compile(re1+re2+re3, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
System.out.println("\n 700000000123".matches(p.pattern())); // true
或者简单地说:
System.out.println( "\n 700000000123".matches("(\n)( )(\\d{12})") ); // true
答案 1 :(得分:1)
您可以将其包装在一系列调用中,而不会影响匹配整个输入。
例如:
String input = "\n 700000000123";
System.out.println(Pattern.compile("\n\\s\\d{12}").matcher(input).find());
<强>输出强>
true
答案 2 :(得分:0)
答案 3 :(得分:0)
\ n仅适用于Unix机器。在Windows中它是\ r \ n。如果您希望代码在linux和windows中都能正常工作,请使用System.getProperty(&#34; line.separator&#34;)。
使用以下
的System.out.println(Pattern.compile(System.getProperty(&#34; line.separator&#34)+&#34; \ S \ d {12}&#34;)匹配器(输入) .find());