正则表达式 – 为什么(?!^)等价于(?<!^)?
发布时间:2020-12-14 06:01:26 所属栏目:百科 来源:网络整理
导读:不久前我在SO上回答了 this question,但我还是没弄清楚为什么我的回答有效. 出于某种原因,字符串开头的负前瞻行为与负面后观行为相同. 例如,在PHP中 preg_replace("/(?!^)12/","ab","12345"); // 12345preg_replace("/(?!^)12/","12345"); // 12345preg_repl
不久前我在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中得到了很好的解释. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |