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


How to convert regular expression from java to php

我有正则表达式:

(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})$~'