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_all
。 preg_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/