2.15 典型正则表达式解释(2)

来源:互联网 发布:面试软件测试工程师 编辑:程序博客网 时间:2024/06/03 23:18

  3.匹配HTML标记之间的内容

  HTML标记一般被尖括号包围,如<a><table><br><input>等。以下正则表达式能够匹配HTML标记。

(?<=<(?<tag>/w+)>).*(?=<///k<tag>>)                                        84

  正则表达式(84)解释:

      (?<tag>/w+)是一个分组,它的名称为“tag”。在该正则表表达式匹配过程,它将保存被匹配的内容。

      <(?<tag>/w+)>匹配HTML标记的开头标记,如<a><table>等。

      (?<=<(?<tag>/w+)>)是一个零宽度正回顾后发断言,它断言自身位置的前面能够匹配<(?<tag>/w+)>所匹配的内容。在此,该表达式断言被匹配的字符串的开头部分是HTML标记的开头标记。

      /k<tag>后向引用名称为“tag”的分组,即被匹配到的HTML标记的名称。

      //匹配字符/

      <///k<tag>>匹配HTML标记的结尾标记,如</a></table>等。

      (?=<///k<tag>>)是一个零宽度正预测先行断言。在此,该表达式断言被匹配的字符串的结尾部分是HTML标记的结尾标记。

      .*匹配HTML标记之间的任何字符。

  使用工具Regex Tester测试正则表达式(84),结果如图所示。

 

 

  4.匹配CSV文件内容

  CSV文件是非常特殊的一种文件,它的内容满足以下4个条件:

      数据被逗号(,)分割。在此,设被分割后的数据称为单个数据。

      单个数据的长度不能为0

      如果某单个数据中包含逗号(,),那么该单个内容被双引号(")包围。

      如果单个数据中包含双引号("),则用两个双引号表示一个双引号。

  如下内容就是某个CSV文件的一部分。

aaa,bbb,ccc,ddd,"ab,de",eee,fff,ggg,"this is ""aa",hhhf

  以下正则表达式能够匹配不包含逗号(,)或者双引号(")的单个数据。

[^",]+                                                                         85

  如果单个数据包含逗号(,)或者双引号(")时,那么该单个数据被双引号(")包围。因此,匹配该类型单个数据的正则表达式形式如下:

"[匹配单个数据内容的正则表达式]"                                              86

  该类型单个数据要么是两个连续双引号(""),要么是除单个双引号("")的任意字符。因此,以下正则表达式能够匹配包含逗号(,)或者双引号(")的单个数据。

"(?:([^"]|""))+"                                                             87

  综合上述,以下正则表达式能够匹配CSV文件中的单个数据。

[^",]+|("(?:([^"]|""))+")                                                  90

  以下正则表达式能够匹配CSV文件的内容。

([^",]+|("(?:([^"]|""))+"))(/s*,/s*([^",]+|("(?:([^"]|""))+")))* 91

  正则表达式(91)解释:

      [^",]+|("(?:([^"]|""))+")匹配CSV文件中的单个数据。

     /s*匹配逗号(,)两边的空白字符。

      /s*,/s*([^",]+|("(?:([^"]|""))+"))匹配“逗号(,)+单个数据”组成的字符串,并且还包含逗号(,)两边的空白字符。

      (/s*,/s*([^",]+|("(?:([^"]|""))+")))*匹配0个或多个“逗号(,)+单个数据”组成的字符串。同样,也包含逗号(,)两边的空白字符。

  使用工具Regex Tester测试正则表达式(91),结果如图所示。

 

 

 
原创粉丝点击