小编Bri*_*rth的帖子

将正反面插入任意正则表达式以模拟字节偏移的后果

将n个字节的正向lookbehind插入(?<=\C{n})任意正则表达式的开头会有什么后果,特别是在用于替换操作时?

至少在PHP中,正则表达式匹配函数,preg_matchpreg_match_all允许匹配在给定的字节偏移之后开始.在任何其他PCRE PHP函数中没有相应的功能 - 例如,您可以指定对替换次数的限制preg_replace,但不能指定那些替换的匹配必须在n个字节之后发生.

显然会有一些(让它们称之为微不足道)对性能和可读性产生影响,但是会有任何(非平凡的)影响,比如匹配变为不匹配(除非它们没有被n个字节偏移)或者替换变得格格不入?

一些例子:

/some expression/成为/(?<=\C{4})some expression/一个4字节的偏移量

/(this) has (groups)/i成为/(?<=\C{2})(this) has (groups)/i2字节的偏移量

据我所知,并且从我运行的有限测试中,添加这个lookbehind有效地模拟了这个偏移参数,并且不会混淆任何其他的lookbehinds,替换或其他控制模式; 但我也不是Regex的专家.

我试图通过将n字节lookbehind插入模式来确定是否有可能对构建替换/过滤器​​函数扩展产生影响.它应该像匹配函数的偏移参数一样工作 - 因此简单地运行表达式substr( $subject, $offset )将不会出于与其不相同的原因preg_match(最明显的是它会切断任何外观,^然后错误地匹配子字符串的开头,不是原来的字符串).

php regex regex-lookarounds

10
推荐指数
1
解决办法
253
查看次数

标签 统计

php ×1

regex ×1

regex-lookarounds ×1