javascript - JS 和 PHP 中的正则表达式不同

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

了解为什么会出现这种差异会很有趣。

最佳答案

您应该使用 preg_match 而不是 preg_match_allpreg_match_all 类似于使用 JavaScript .match() 以及带有 g 修饰符的正则表达式,例如

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

返回所有匹配项时得到空匹配的原因是因为 *? 量词将匹配空字符串,因此整个正则表达式与空字符串匹配字符串的末尾。

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

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

相关文章:

c# - 如何使用正则表达式将字符串 `{{key.value}}` 拆分为两个字符串 `key` 和 `value` ?

javascript - 弹出窗口在 asp.net 和 vb.net 网页上不起作用

javascript - 在 Atom-shell 中禁用退格键

javascript - 在输入元素javascript之后获取新行

javascript - 使用 jquery AJAX PDF 下载

javascript - 读取简单的 JSON 数组

javascript - 如何排除特殊字符并允许使用西类牙文/英文字母?

arrays - 将字符串(基于逗号)拆分为数组,在列表末尾添加一个空项

python - 如何更改除这两个字符之外的所有字符?

javascript - 如何在没有重复字母的情况下检查正则表达式是否为真?