PCRE重复基于捕获的数字 - (\ d)(.{\ 1})

 youxiang574传奇_257 发布于 2023-02-09 13:08

请注意,正则表达式通常在执行之前编译到状态机,并且不会被天真地解释.

从技术上讲,(其中n是数字,X是包含所有字符的规则)不是常规语言.它不是一种无上下文的语言,甚至不是一种 上下文敏感的语言!(参见乔姆斯基层次结构).虽然PCRE正则表达式可以匹配所有所有无上下文的语言(如果适当地表达),但引擎只能匹配非常有限的上下文敏感语言子集.我们手上有一个很大的问题,既不能用正则表达式解决,也不能用所有PCRE扩展的正则表达式来解决.n Xn

这里的解决方案通常是在尝试解析某些输入时分离标记化,解析和语义验证.这里:

    读取数字(可能使用正则表达式)

    阅读以下字符(可能使用正则表达式)

    验证字符串的长度是否等于给定的数字.

显然,如果没有实现回溯或类似的策略,这在特定情况下不会起作用,所以我们必须自己编写一个可以处理输入的解析器:

    读取数字(可能使用正则表达式)

    然后读取该位置的那个字符数(可能使用类似substr函数).

正则表达式很棒,但它们根本不是解决每个问题的正确工具.有时,自己编写程序更容易.

1 个回答
  • 请注意,正则表达式通常在执行之前编译到状态机,并且不会被天真地解释.

    从技术上讲,(其中n是数字,X是包含所有字符的规则)不是常规语言.它不是一种无上下文的语言,甚至不是一种 上下文敏感的语言!(参见乔姆斯基层次结构).虽然PCRE正则表达式可以匹配所有所有无上下文的语言(如果适当地表达),但引擎只能匹配非常有限的上下文敏感语言子集.我们手上有一个很大的问题,既不能用正则表达式解决,也不能用所有PCRE扩展的正则表达式来解决.n Xn

    这里的解决方案通常是在尝试解析某些输入时分离标记化,解析和语义验证.这里:

      读取数字(可能使用正则表达式)

      阅读以下字符(可能使用正则表达式)

      验证字符串的长度是否等于给定的数字.

    显然,如果没有实现回溯或类似的策略,这在特定情况下不会起作用,所以我们必须自己编写一个可以处理输入的解析器:

      读取数字(可能使用正则表达式)

      然后读取该位置的那个字符数(可能使用类似substr函数).

    正则表达式很棒,但它们根本不是解决每个问题的正确工具.有时,自己编写程序更容易.

    2023-02-09 13:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有