加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 正则表达式匹配字符串与z的相同数量,而b是与y的相

发布时间:2020-12-14 06:07:44 所属栏目:百科 来源:网络整理
导读:我目前正在编写一本关于正则表达式的书,其中一个练习问题是写一个正则表达式,它匹配的字符串与z的相同,而b的字符与y相同.到目前为止,我想出了以下正则表达式. ^(?=[^az]*([az][^az]*[az][^az]*)*$)(?=[^by]*([by][^by]*[by][^by]*)*$).*$ 这个问题是当a和z是
我目前正在编写一本关于正则表达式的书,其中一个练习问题是写一个正则表达式,它匹配的字符串与z的相同,而b的字符与y相同.到目前为止,我想出了以下正则表达式.

^(?=[^az]*([az][^az]*[az][^az]*)*$)(?=[^by]*([by][^by]*[by][^by]*)*$).*$

这个问题是当a和z是偶数并且b和y是偶数时它不正确匹配(即azzz匹配,但z比s更多).有没有办法修改我的正则表达式以正确匹配或我是否采取错误的方法?

解决方法

对于一些正则表达式引擎,您可以使用预定义的 subroutines到(笨拙地) define context-free grammars,尽管语法因引擎而异,并且不是标准化的.观察(仍然不完整,但到达那里):

(?(DEFINE)
    (?'all'(?&az)|(?&by)|(?&abzy)|(?&bayz))
    (?'az'a(?&all)*z|z(?&all)*a)
    (?'by'b(?&all)*y|y(?&all)*b)
    (?'abzy'
        a(?&all)*b(?&all)*z(?&all)*y|
        a(?&all)*y(?&all)*z(?&all)*b|
        z(?&all)*b(?&all)*a(?&all)*y|
        z(?&all)*y(?&all)*a(?&all)*b
    )
    (?'bayz'
        b(?&all)*a(?&all)*y(?&all)*z|
        b(?&all)*z(?&all)*y(?&all)*a|
        y(?&all)*a(?&all)*b(?&all)*z|
        y(?&all)*z(?&all)*b(?&all)*a
    )
)

^(?&all)+$

Demo on Regex101

这样做是定义一组子模式并递归应用它们.在实际的“模式”中使用^和$anchors可确保整个字符串与它们匹配.简单本身.

但是,如果你在生产环境中实际上做了类似的事情,那么当有人发现它时,有人会责备你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读