不久前我在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中得到了很好的解释.