正在寻找正则表达式的建议

时间:2014-12-17 10:22:36

标签: java regex

我试图创建一个必须匹配这些模式的正则表达式: \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/来帮助我。

你有建议这个正则表达式的建议吗?我想了解为什么目前它不起作用。

4 个答案:

答案 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)

^\\\\n\\s+\\d{12}$

我想这应该适合你。参见演示。

https://regex101.com/r/eZ0yP4/33

答案 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());