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),结果如图所示。