JS:

'abc/foln'.match(/[^\/]*?\/?$/); // ['foln']


PHP:

preg_match_all('/[^\/]*?\/?$/', 'abc/foln', $e); // ['foln', '']
preg_match_all('/\/[^\/]*?\/?$/', 'abc/foln', $e); // ['/foln']
preg_match_all('/\/?[^\/]*?\/?$/', 'abc/foln', $e); // ['/foln', '']


我如何在PHP中获得与JS中相同的结果?

知道为什么会有这种差异会很有趣。

最佳答案

您应该使用preg_match而不是preg_match_allpreg_match_all类似于将JavaScript .match()与带有g修饰符的regexp一起使用,例如



console.log('abc/foln'.match(/[^\/]*?\/?$/g));





返回所有匹配项时得到空匹配项的原因是因为*?量词将匹配空字符串,因此整个regexp都将匹配字符串末尾的空字符串。

当regexp用^$锚定时,通常没有什么意义返回多个匹配项,因为它们只能匹配一次(除非您使用m修饰符,这会使它们匹配行的开头/结尾,而不是比整个字符串)。

关于javascript - JS和PHP中不同的RegExp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53965536/

10-12 12:39