`
wangangie18
  • 浏览: 43158 次
  • 性别: Icon_minigender_2
  • 来自: 珠海
最近访客 更多访客>>
社区版块
存档分类
最新评论

正则表达式匹配排列

 
阅读更多

  前几天有位同事问到这方面的问题,当前首先想到的是用平衡组,不过平衡组的例了主要用于匹配嵌套的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#的测试代码如下:  string input = "AB"; //string input = "AA"; string pattern = @"(?'item'){2}(?'-item'[A-D]){2}(?(item)(?!))"; Match match = Regex.Match(input, pattern); if (match.Success) { Console.WriteLine(match.Value); }
分享到:
评论

相关推荐

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    其他的正则表达式匹配.php 其他的正则表达式匹配 取得正则表达式的全部匹配.php 取得正则表达式的全部匹配 返回与模式匹配的数组单元.php 返回与模式...

    正则表达式

    当你需要定位匹配某种模式的字符串时就可以使用正则表达式。例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式来定位所有的超链接。 当然,为了指定一种模式,使用...这种记号是不够精确的。你需要...

    Python爬虫教程之利用正则表达式匹配网页内容

    正则表达式是一种描述字符串排列的一种语法规则,通过该规则可以在一个大字符串中匹配出满足规则的子字符串。简单来说,就是给定了一个字符串,在字符串中找到想要的字符串,如一个电话号码,一个IP地址,一个字段,...

    正则表达式相关资料

    当你需要定位匹配某种模式的字符串时就可以使用正则表达式。例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式来定位所有的超链接。 当然,为了指定一种模式,使用...这种记号是不够精确的。你需要...

    js正则表达式之$1$2$3$4$5$6$7$8$9属性,返回子匹配的结果

    功能:$1-$9存放着正则表达式中最近的9个正则表达式的... [removed] //创建要进行匹配的字符串 var objStr=”这是我的手机号13100000000″ //创建正则表达式匹配手机号码 var re=/(13)(/d)(/d{8})/;//该正则表达式可

    Shell正则表达式学习笔记

    正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。 二、正则表达式与通配符 1. 正则表达式 用来在文件中匹配符合条件的字符串,正则表达式是“包含匹

    Shell 正则表达式 详解

    正则表达式是用于描述字符排列和匹配模式的一种语法规则。 二、基本正则表达式语法 正则表达式主要用于字符串的模式分割、匹配、查找及替换操作,下面来关注一下正则表达式基本的元字符和它的作用。 正则表达式的...

    PHP正则表达式笔记与实例详解

     正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。  1. 用途:匹配、查找、替换、分割  2. php提供了两套正则表达式函数库  *1. Per

    PHP 正则表达式函数库(两套)

    正则表达式:用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。

    PHP之正则表达式捕获组与非捕获组(详解)

     我们知道,在正则表达式下(x) 表示匹配’x’并记录匹配的值。这只是比较通俗的说法,甚至说这是不严谨的说法,只有()捕获组形式才会记录匹配的值。非捕获组则只匹配,不记录。  捕获组:  (pattern) 这种形式...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    * Summary of regular-expression constructs 正则表达式结构简介: * Construct Matches * Characters 字符: * x The character x x 字符 x * \\ The ...

    正则表达式学习经验分析第1/2页

    正则表达式 [Jj]ava.+ 匹配下列形式的任何字符串: 首字母是J或j 后续的三个字母是ava 字符串的剩余部分由一个或多个任意字符组成 例如,字符串“javaness”匹配这个特殊的正则表达式,但是字符串“Core Java”...

    PHP 正则表达式的几则使用技巧

    用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。 PHP中的正则函数: PHP中有两套正则函数,两者功能差不多,分别为: 一套是由PCRE(Perl Compatible Regular

    一个关于正则表达式的问题

    在正则表达式中 . (点)表示除换行符以外的任意字符(在加上m参数打开多行匹配模式时表示任意字符),用转义符号\.表示点这个字符本体。 代码如下:var Pattern3=/<(.)+>/i; alert(Pattern3.exec(

    PHP学习正则表达式 课件第1/2页

    正则表达式:用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。

    PHP100视频教程 16:PHP小偷程序原理和实例.rar

    软件介绍 1、初识正则表达式  ^([a-zA-Z0-9_-]) @([a-zA-Z0-9_-]) (\.[a-zA-Z0-9_-])  用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。 2、正则表达式函数 ...

    PHP100视频教程 16:PHP小偷程序原理和实例

    1、初识正则表达式 ^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+ 用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。2、正则表达式函数 ereg() eregi() ...

    文本三剑客:grep sed awk

    什么是正则表达式: 正则表达式用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分隔、匹配、查找及替换操作 元字符 * 重复匹配前一个字符0到多次 . 匹配除了换行符外任意一个字符,类似...

    Design-of-Computer-Programs-Udacity

    定义正则表达式匹配的字符串集; 其他语言。 第 4 课:通过搜索处理复杂性 搜索:用手电筒或船找路; 浇水。 分析算法的效率; 复发关系; 用算法匹配数据类型。 第 5 课:通过概率处理不确定性 概率:猪的游戏;...

Global site tag (gtag.js) - Google Analytics