JS和PHP中不同的RegExp

时间:2018-12-28 23:54:44

标签: javascript regex

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中相同的结果?

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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