手机版

定期查看

时间:2021-11-25 来源:互联网 编辑:宝哥软件园 浏览:

00-1010环顾四周,只匹配子表达式,不占用字符,匹配的内容不保存到最终的匹配结果,宽度为零。环顾四周的最终结果是一个位置。“环顾四周”的功能相当于给位置增加了一个附加条件。只有满足这个条件,才能成功匹配到环顾四周的子表情。根据环顾的方向,有两种:顺序和逆序;根据是否匹配,有阳性和阴性两种;综合起来,有四种环顾四周的方式。按顺序环视相当于在当前位置的右侧附加一个条件,而按相反顺序环视相当于在当前位置的左侧附加一个条件。表达式描述(?=Expression)肯定是倒过来看,说明左边的位置可以匹配Expression(?表达式)负数按相反的顺序环顾四周,表示左边的位置不能匹配表达式(?=Expression)顺序必须左右看,表示右边的位置可以匹配Expression(?Expression)序列否定了环视,这意味着位置的右侧不能匹配用于环视的Expression的名称。有些文档叫做预搜索,有些叫做什么断言。这里使用了《精通正则表达式》中容易被更多人接受的“环顾四周”这个名称。其实是什么并不重要,只要知道是什么,就几条语法规则。很容易记住

1 环视基础

环视是正则化的难点。对环视的理解可以从应用和原理两个方面来理解。如果你想更清楚更深刻地理解它,最好从原理的角度去理解。规则匹配的基本原则是指NFA发动机匹配原则。如上所述,环顾四周相当于给“位置”附加了一个条件。环顾四周的困难在于找到这个“位置”,这个问题解决了,环顾四周没有秘密。00-1010四处看看订单肯定(?=表达式),当子表达式表达式匹配成功时,(?=表达式),并报告(?=表达式)成功匹配当前位置。四处寻找顺序否定(?表达式),当子表达式表达式匹配成功时,(?表达式)匹配失败;当子表达式表达式不匹配时,(?表达式),并报告(?表达式)成功匹配当前位置;NFA发动机匹配原理中解释了正向环视的例子。在这里,我们将按顺序解释周围的负面观察。

来源:aapone/pbbdivtwo/divcc正则表达式:(?/?p \ b)[]的常规含义是匹配除p…或/p之外的所有标签。匹配过程:

首先,字符“”获得控制权,匹配从位置0开始。由于“”与“a”不匹配,整个表达式在位置0处不匹配,第一次迭代匹配失败。常规引擎向前行驶,第二次迭代匹配从位置1开始。重复上述过程,直到位置2“”匹配成功,控制权移交给“(?/?p \ b)";"(?/?P\b)"子表达式取得控制权,然后匹配内部子表达式。首先是“/?”获得控制权,尝试匹配“p”失败,返回,不匹配,将控制权交给“p”;尝试用“p”匹配“p”,匹配成功,控制权交给“\ b”;“\b”尝试匹配位置4,匹配成功。此时,子表达式匹配完成。"/?P\b“匹配成功,然后查看表达式”(?/?P\b)”,匹配失败。在位置2,整个表达式不匹配,新迭代也不匹配。正则化引擎被向前驱动,下一次迭代从位置3开始尝试。8号位也会有一轮“/”。P\b "匹配"/p "成功,导致环视表达式(?/?P\b)”,这导致了表达式匹配失败的整个过程。重复上述过程,直到位置14“匹配”成功,控制权移交给”(?/?p \ b)";"/?试图匹配“d”失败,回溯,不匹配,控制到“p”;尝试用“p”匹配“d”,匹配失败。没有可回溯的替代状态,匹配失败。此时,子表达式匹配完成。”/?P\b“未能匹配,然后查看表达式”(?/?P\b)"已成功匹配。匹配的结果是位置15,然后控制给“]”;试着从位置15开始用“]”匹配,可以成功匹配到“div”,控制权交给“;通过“”匹配“”。此时,正则表达式匹配完成,并报告匹配成功。匹配结果为“div”,起始位置为14,结束位置为19。其中""匹配" ","(?/?P\b)"匹配位置15,"[]"匹配字符串" div "," "匹配" "。00-1010以相反的顺序环顾四周确定(?=表达式),当子表达式表达式匹配成功时,(?=表达式),并报告(?=表达式)成功匹配当前位置。以相反的顺序寻找负数(?表达式),当子表达式表达式匹配成功时,(?表达式)匹配失败;当子表达式表达式不匹配时,(?表达式),并报告(?表达式)成功匹配当前位置;按顺序环顾四周相当于在当前位置的右侧附加一个条件,因此它的匹配尝试从当前位置开始,然后尝试向右匹配,直到某个位置使匹配成功或不成功。逆序环视的特殊之处在于,相当于在当前位置左侧附加了一个条件,所以不会在当前位置尝试匹配,而是从当前位置左侧的某个位置开始,报告匹配的成败,直到当前位置匹配为止。顺序尝试匹配的起点是确定的,即当前位置,而匹配的终点是不确定的。反过来看,匹配的起点是不确定的,是当前位置左侧的某个位置,而匹配的终点是确定的,是当前位置。因此,按顺序环顾相对简单,而倒序环视相对复杂。这就是为什么大多数语言和工具支持顺序查看,而只有少数语言支持反向查看。JavaScript只支持顺序扫描,不支持反向扫描。在Java中,顺序查找和反向查找都支持,但是反向查找只支持长度确定的表达式,反向查找中的量词只支持“?".不支持其他不定长的量词。长度确定后,引擎可以找到左边一个固定长度的位置作为起点尝试匹配,而如果长度不确定,则需要从位置0开始尝试匹配,处理复杂度明显。目前只有。NET支持无限长的逆序扫描。

2 环视匹配原理

来源:diva测试/div正则表达式:(?=div)[^](?=/div)这种规律性的含义是在div和/div标签之间匹配内容,而不是div和/div标签本身。匹配过程:第一,由“(?=div”),并从位置0开始匹配。由于位置0是起始位置,左侧没有任何内容,“div”一定不匹配,所以查看表达式”(?=div)"匹配失败,这导致整个表达式在位置0处匹配失败。第一轮迭代匹配失败,正则化引擎被向前驱动,从位置1开始尝试第二轮迭代匹配。直到它被驱动到位置5,"(?=div)”,向左查找5个位置,从位置0开始匹配,成功将“div”与“div”匹配,从而(?=div)”,匹配结果为位置5,控制权交给“]”;“[]”尝试从位置5匹配,匹配“a测试”成功,控制权交给了”(?=/div)";通过“/div”匹配“/div”成功,因此(?=/div)”,匹配结果为位置11。此时,正则表达式匹配完成,并报告匹配成功。匹配结果为“a test”,起始位置为5,结束位置为11。"(?=div)"匹配位置5,"[]"匹配"一个测试","(?=/div)"匹配位置11。逆序负向环视的匹配过程与上述过程类似,只是表达式匹配失败时,逆序负向表达式(?表达式)匹配成功。到目前为止,环顾四周的匹配原则已经基本解释清楚了,环顾四周也没有什么秘密。需要的只是更多的练习。10-10, 2010.我厌倦了今天的写作。我先举一个全面的暂时环顾的应用例子。至于环顾四周的应用场景和技巧,我稍后会整理出来。要求:数字的格式为“,”的货币格式。正则表达式:(?=\d)(?\.\d*)(?=(?\d{3})(?3360 \.\ d | $)测试代码:double [] data=newdouble [] {0,12,123,1234,12345,123456,1234567,123456789,1234567890,12.30。Foreach(数据中的双d){ richtextbox 2 . text='源字符串:d.ToString()。PadRight(15)“格式:Regex。替换(d.ToString(),@ '(?=\d)(?\.\d*)(?=(?\d{3})(?\.\d |$)',',')' \ n ';}输出结果:源字符串:0格式:0源字符串:12格式:12源字符串:123格式:123源字符串:1234格式:1,234源字符串:12345格式:12,345源字符串:123456格式:123,456源字符串:1234567格式。57源字符串:123456789格式:123,456,789源字符串:1234567890格式:1,234,567,890源字符串:12.345格式:12.345源字符串:123.456格式:123.456源字符串:12336。24.56源字符串:12345.6789格式:12,345.6789源字符串:123456.789格式:123,456.789源字符串:1234567.89格式:1,234,567.89源字符串:12345678.9格式:12。1.这个位置的左边必须是数字2。该位置的右侧必须是一个数字,直到“.”或者结尾出现,数字的个数必须是3的倍数。没有。可以出现在这个位置的左侧。这些位置完全可以由以上三项来决定,只要实现以上三项并结合正则表达式即可。根据分析,最终的匹配结果是一个位置,所以要求所有子表达式的宽度为零。

1.它是当前位置左侧的一个附加条件,所以有必要反过来看看。因为要求必须出现,所以是肯定的。满足这个条件的子表达式是”(?=\ d) "2。是当前位置右侧的附加条件,所以要按顺序左右看,也要求出现,所以是肯定的,是一个数字,数字是3的倍数,也就是,“(?=(?3360 \ d {3}) *)",直到" "或者结尾出现,也就是“(?=(?\d{3})*(?3360 \.| $)) "3.它是当前位置左侧的一个附加条件,所以有必要反过来看看。因为要求不能出现,所以是否定的,即,“(?\.\d*)”因为零宽度的子表达式是非互斥的,所有最终匹配都在同一个位置,所以顺序不影响最终匹配结果,可以任意组合,但习惯上是左边写逆序看,右边写顺序看。

版权声明:定期查看是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。