按照规则匹配原则的相反顺序环顾四周
注:部分内容需要进一步研究修改,因为近期工作太忙,暂时没空。没学过的可以跳过这个,想学的不要受我思维的影响。有明确的研究请指正。1问题导致前几天在CSDN论坛遇到这样一个问题:var str=' 8912341253789此字符串中重复的数字需要删除,这是89123457的结果。首先要注意的是,这个要求不适用于正规化。至少,正规化不是最好的实现方式。这个问题本身并不是本文的重点。本文要讨论的是由这个问题的解导出的另一个正则匹配原理问题。让我们来看看这个问题本身的解决方案。复制的代码如下:字符串str=' 8912341253789Regex reg=新Regex(@'((\d)\d*?)\2');while (str!=(str=reg。替换(字符串,' $ 1 ')){ } RichTextBox 2。Text=str/* - 89123457 */基于此,有朋友提出了另一个问题,为什么下面的正则化没有效果”(?=(?值\d)。*?)\kvalue”,这也引出了一些更深入的逆序look细节,其中涉及到逆序look的匹配原理和匹配过程。虽然在前两篇博客中也有介绍,但不够深入。请参考常规基础的——环视和常规应用的——反向环视。本文将把反向查找和反向引用与这个复杂的应用场景结合起来,对反向查找进行深入的探讨。为了首先简化和抽象问题,在上述正则化中使用了命名捕获组和命名捕获组的反向引用,这在一定程度上增加了问题的复杂性。它被写成普通的捕获组,用“\d”代替“.”范围太大,如下所示”(?=(\d)\d*?)\1”需要匹配的字符串。抽象来说,取两个典型的字符串如下。源字符串1: 878源字符串2: 9878与上面的正则表达式类似,正则表达式1有四种形式:(?=(\d)\d*)\1正则表达式2:(?=(\d)\d*?)\1正则表达式3:(?=(\d))\d*\1正则表达式4:(?=(\d))\d*?\1先看匹配结果:复制的代码是: string[]source=newstring[]{ ' 878 ',' 9878 ' };ListRegex regs=new ListRegex();regs。添加新的Regex(@ '(?=(\ d)\ d *)\ 1’);regs。添加新的Regex(@ '(?=(\d)\d*?)\1'));regs。添加新的Regex(@ '(?=(\ d))\ d * \ 1 ');regs。添加新的Regex(@ '(?=(\d))\d*?\1'));Foreach(源中的字符串s){ foreach(regex r in regs){ richtextbox 2 . text='源字符串:s.PadRight(8),';Textbox2.text='正则表达式:' r.ToString()。pad right(18 ' ');Textbox2.text='匹配结果:' r.match (s)。值' \ n-\ n ';} richTextBox2。文本='-\ n ';}/*-输出源字符串:878正则表达式:(?=(\d)\d*)\1匹配结果:8-源字符串:878正则表达式:(?=(\d)\d*?)\1匹配结果:-源字符串:878正则表达式:(?=(\d))\d*\1匹配结果:78-源字符串:878正则表达式:(?=(\d))\d*?\1匹配结果:78-正则表达式:(?=(\d)\d*)\1匹配结果:-源字符串:9878正则表达式:(?=(\d)\d*?)\1匹配结果:-源字符串:9878正则表达式: (
版权声明:按照规则匹配原则的相反顺序环顾四周是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。