我有正则表达式:
(9[0-5[7-9]]{1}[\d]{10})|([0-2]\d{11})
这个表达式适用于java,但不适用于php。帮我转换成php
// true
System.out.println("123456789012".matches("(9[0-5[7-9]]{1}[\\d]{10})|([0-2]\\d{11})"));
System.out.println("973456789012".matches("(9[0-5[7-9]]{1}[\\d]{10})|([0-2]\\d{11})"));
System.out.println("000456789012".matches("(9[0-5[7-9]]{1}[\\d]{10})|([0-2]\\d{11})"));
// false
System.out.println("12345678901".matches("(9[0-5[7-9]]{1}[\\d]{10})|([0-2]\\d{11})"));
System.out.println("963456789012".matches("(9[0-5[7-9]]{1}[\\d]{10})|([0-2]\\d{11})"));
发布于 2014-10-09 17:34:55
看起来它应该只排除96
...从开始的9
开始,因此可以简化为:
^(?:9(?!6)|[0-2])\d{11}$
对于PHP,需要将模式包装到delimiters中。
Test at regex101
发布于 2014-10-09 16:58:36
您的Java正则表达式可以重写为:
9[0-57-9]\d{10}|[0-2]\d{11}
由于Java确保整个字符串与正则表达式匹配,因此您需要在String.matches()
中锚定正则表达式才能获得相同的效果:
'~^(?:9[0-57-9]\d{10}|[0-2]\d{11})$~'
https://stackoverflow.com/questions/26274251
复制相似问题