栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用正则表达式(PCRE)匹配a ^ nb ^ nc ^ n(例如“ aaabbbccc”)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用正则表达式(PCRE)匹配a ^ nb ^ nc ^ n(例如“ aaabbbccc”)

受NullUserExceptions答案的启发(他已经删除了,因为它在一种情况下失败了),我认为自己已经找到了解决方案:

$regex = '~^    (?=(a(?-1)?b)c)     a+(b(?-1)?c)$~x';var_dump(preg_match($regex, 'aabbcc'));    // 1var_dump(preg_match($regex, 'aaabbbccc')); // 1var_dump(preg_match($regex, 'aaabbbcc'));  // 0var_dump(preg_match($regex, 'aaaccc'));    // 0var_dump(preg_match($regex, 'aabcc'));     // 0var_dump(preg_match($regex, 'abbcc'));     // 0

说明

如果您考虑不使用正向超前断言(该

(?=...)
部分)的正则表达式,则具有以下内容:

~^a+(b(?-1)?c)$~

这无非是检查是否存在任意数量的

a
s,然后检查
b
s和
c
s的数量是否相等。

这还不能满足我们的语法要求,因为

a
s
的数量也必须相同。我们可以通过检查
a
s的数量等于s的数量来确保
b
。这就是前瞻断言中的表达式所做的:
(a(?-1)?b)c
。该
c
所以我们不只是匹配的一部分是必要
b
秒。


结论

我认为这令人印象深刻,这表明现代正则表达式不仅能够解析非常规语法,而且甚至可以解析非上下文无关的语法。希望这将解决“您不能使用正则表达式来执行X,因为X不规则”的无休止的模仿。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号