正则表达式匹配排列
来源:互联网 发布:淘宝买家秀 百度云盘 编辑:程序博客网 时间:2024/06/04 18:13
前几天有位同事问到这方面的问题,当前首先想到的是用平衡组,不过平衡组的例了主要用于匹配嵌套的Html标签,在网上查了一下,也没这方面的资料,不过这个问题最终还是通过平衡组解决了
先来看全排列了,假如有元素A,B,C,由这三个元素组成的组成的全排列为ABC,ACB,BAC,BCA,CAB,CBA六种,显然用[A-C]{3}这样的正则表达式是不对的,因为这样会匹配像AAA, ABB这样的排列,当然你可以通过或运算符将所有的排列列出来,正则表达式如下(ABC|ACB|BAC|BCA|CAB|CBA),这是没有问题的,但是如果有4个元素,就有24排列,如果有5个元素,有120种排列,用这种方法就不太现实了,如果改用平衡组来实现,就简单多了,对A,B,C三个元素,正则表达式如下:
(?'A')(?'B')(?'C')((?'-A'A)|(?'-B'B)|(?'-C'C)){3}(?(A)(?!))(?(B)(?!))(?(C)(?!))
首先往栈中放入三个名称为A, B, C的三个分组,注意由于这三个分组不匹配任何内容
接着当匹配元素A时,将名称为A的分组从栈中移除,当匹配元素B是,将名称为B的分组从栈中移除,当匹配元素C时,将名称为C的分组从栈中移除,{3}指定只匹配3个元素
最后检查栈中是否还有名称为A,B,C的分组,如果有,则匹配失败。
OK,全排列搞定了,下面来看部分排列了,假如有A,B,C,D四个元素,取两个元素的排列为AB,AC,AD,BD,BA,BC,BD,CA,CB,CD,DA,DB,DC,共是12种,当然用或运算符讲12种情况列出来是没问题,正则表在式就不写了,如果取三个元素呢,就有24种情况了,显然通过这种方式不够灵活了,通过平衡组,这个问题一样可以解决,正则表达式如下:
(?'item'){2}(?'-item'[A-D]){2}(?(item)(?!))
先往栈中压入2个名为item的分组,这两个分组不匹配如何元素
接着当匹配到A,B,C,D中的任何一个元素,从栈中移除一个item分组,{2}保证只匹配两个元素
最后检查栈中是否还有item分组,有则匹配失败
C#的测试代码如下:
- 正则表达式匹配排列
- 正则表达式字符匹配
- 正则表达式 匹配"<"方法!
- 正则表达式匹配规则
- 正则表达式匹配规则
- 正则表达式最小匹配
- 正则表达式匹配字符串
- 正则表达式匹配
- 正则表达式匹配汉字
- 正则表达式匹配规则
- 正则表达式匹配关键字
- 正则表达式多次匹配
- 正则表达式匹配
- 正则表达式匹配汇总
- java:正则表达式匹配
- 正则表达式匹配居民身份证
- 正则表达式匹配次
- 匹配的正则表达式
- SAP BW 查看数据源提取方法
- 封闭开发痛并快乐着
- 在编译PHP的时候 生成的是libphp4.a 还是libphp4.so 模块而且生成之后
- 引导加载程序GRUB
- Linux也需要GALGAME:wine跑GALGAME测试
- 正则表达式匹配排列
- JDBC---数据库连接池
- linux安装TL-WN722N驱动
- java iterator 用法
- PHP中时间和日期函数总结
- windows phone 7从0开始
- svn代码版本管理总结
- WIN7笔记本 用户账户登录密码忘记/错误解决方法
- 得到两个表中相同的记录