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
修饰符的正则表达式,例如
console.log('abc/foln'.match(/[^\/]*?\/?$/g));
返回所有匹配项时得到空匹配的原因是因为 *
和 ?
量词将匹配空字符串,因此整个正则表达式与空字符串匹配字符串的末尾。
当正则表达式使用 ^
或 $
锚定时,返回多个匹配项通常没有什么意义,因为它们只能匹配一次(除非您使用 >m
修饰符,这使它们匹配行的开头/结尾而不是整个字符串)。
关于javascript - JS 和 PHP 中的正则表达式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53965536/