正则表达式 – 为什么(?!^)等价于(?<!^)?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 为什么(?!^)等价于(?<!^)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
不久前我在SO上回答了 this question,但我还是没弄清楚为什么我的回答有效.

出于某种原因,字符串开头的负前瞻行为与负面后观行为相同.

例如,在PHP

preg_replace("/(?!^)12/","ab","12345");   // 12345
preg_replace("/(?<!^)12/","12345");  // 12345
preg_replace("/(?!1)23/","12345");   // 1ab45
preg_replace("/(?<!1)23/","12345");  // 12345

我知道这不是有史以来最有用的问题,但这已经让我困扰了几个星期.

解决方法

插入符号是零宽度断言.事实上,前瞻和后视也是零宽度.因此,在这种情况下,如果您向前或向后看并不重要,您仍然在寻找相同的角色位置.

这在this article中得到了很好的解释.

猜你在找的正则表达式相关文章