我有正则表达式:
(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})"));
看起来应该只排除96
。。。从起始的9
个,因此可以简化为:
^(?:9(?!6)|[0-2])'d{11}$
对于PHP,需要将模式封装到分隔符中。
在regex101 上测试
您的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})$~'