如何将正则表达式从java转换为php

时间:2014-10-09 08:54:47

标签: java php regex

我有正则表达式:

(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})"));

2 个答案:

答案 0 :(得分:1)

看起来它应该只从96起始9排除^(?:9(?!6)|[0-2])\d{11}$ ...因此可以简化为:

{{1}}

对于PHP,需要将模式包装到delimiters

Test at regex101

答案 1 :(得分:0)

您的Java正则表达式可以重写为:

9[0-57-9]\d{10}|[0-2]\d{11}

由于Java String.matches()确保整个字符串与正则表达式匹配,因此您需要在PHP中锚定正则表达式以获得相同的效果:

'~^(?:9[0-57-9]\d{10}|[0-2]\d{11})$~'