易语言正则表达式,摘自精易编程助手 正则调试
正则表达式语法:
\
将下一个字符标记为特殊字符或字面值。
例如"n"与字符"n"匹配。"\n"与换行符匹配。序列"\"与"\"匹配对面,"("与"("匹配。
^
匹配输入的开始位置。
$
匹配输入的结尾。
*
匹配前一个字符零次或几次。
例如,"zo*"可以匹配"z"、"zoo"。
+
匹配前一个字符一次或多次。
例如,"zo+"可以匹配"zoo",但不匹配"z"。
?
匹配前一个字符零次或一次。
例如,"a?ve?"可以匹配"never"中的"ve"。
.
匹配换行符以外的任何字符。
(pattern)
与模式匹配并记住匹配。匹配的子字符串可以从作为结果的Matches集合中使用Item[0]…[n]取得。如果要匹配括号字符(和),可使用"("或")"。
x|y
匹配x或y。
例如"z|food"可匹配"z"或"food"。"(z|f)ood"匹配"zood"或"food"。
{n}
n为非负的整数。匹配恰好n次。
例如,"o{2}"不能与"Bob中的"o"匹配,但是可以与"foooood"中的前两个o匹配。
{n,}
n为非负的整数。匹配至少n次。
例如,"o{2,}"不匹配"Bob"中的"o",但是匹配"foooood"中所有的o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。
{n,m}
m和n为非负的整数。匹配至少n次,至多m次。
例如,"o{1,3}"匹配"fooooood"中前三个o。"o{0,1}"等价于"o?"。
[xyz]
一个字符集。与括号中字符的其中之一匹配。
例如,"[abc]"匹配"plain"中的"a"。
[^xyz]
一个否定的字符集。匹配不在此括号中的任何字符。
例如,"[^abc]"可以匹配"plain"中的"p".
[0-9]
匹配0-9之间的任意1个数字。
[a-z]
表示某个范围内的字符。与指定区间内的任何字符匹配。
例如,"[a-z]"匹配"a"与"z"之间的任何1个小写字母。
[A-Z]
表示某个范围内的字符。与指定区间内的任何字符匹配。
例如,"[A-Z]"匹配"A"与"Z"之间的任何1个大写字母。
[^m-z]
否定的字符区间。与不在指定区间内的字符匹配。
例如,"[m-z]"与不在"m"到"z"之间的任何字符匹配。
\b
与单词的边界匹配,即单词与空格之间的位置。
例如,"er\b"与"never"中的"er"匹配,但是不匹配"verb"中的"er"。
\B
与非单词边界匹配。"ea*r\B"与"neverearly"中的"ear"匹配。
\d
与一个数字字符匹配。等价于[0-9]。
\D
与非数字的字符匹配。等价于[^0-9]。
\f
与分页符匹配。
\n
与换行符字符匹配。
\r
与回车字符匹配。
\s
与任何白字符匹配,包括空格、制表符、分页符等。等价于"[\f\n\r\t\v]"。
\S
与任何非空白的字符匹配。等价于"[^\f\n\r\t\v]"。
\t
与制表符匹配。
\v
与垂直制表符匹配。
\w
与任何单词字符匹配,包括下划线。等价于"[A-Za-z0-9_]"。
\W
与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。
\num
匹配num个,其中num为一个正整数。引用回到记住的匹配。
例如,"(.)\1"匹配两个连续的相同的字符。
\n
匹配n,其中n是一个八进制换码值。八进制换码值必须是1,2或3个数字长。
例如,"\11"和"\011"都与一个制表符匹配。"\0011"等价于"\001"与"1"。八进制换码值不得超过256。否则,只有前两个字符被视为表达式的一部分。允许在正则表达式中使用ASCII码。
\xn
匹配n,其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。
例如,"\x41"匹配"A"。"\x041"等价于"\x04"和"1"。允许在正则表达式中使用ASCII码。
网页相关:
匹配HTML标记
<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配链接地址
href *= *['"]*(\S+)["']
评注:匹配网页上的链接地址
匹配链接地址和标题
\<a href *= *['"]*(\S+)["'].*\>(.[^\<]*)?\</a>
评注:匹配网页上的链接地址及标题
匹配网址URL
[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配网站域名
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
评注:一个完整的域名,由根域、顶级域、二级、三级……域名构成,每级域名之间用点分开,每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,长度不超过63。
很显然,单独的名字可以由正则表达式[a-zA-Z0-9][-a-zA-Z0-9]{0,62}来匹配,而完整的域名至少包括两个名字(比如google.com,由google和com构成),最后可以有一个表示根域的点(在规范中,最后有一个点的才是完整域名,但一般认为包括两个以上名字的域名也是完整域名,哪怕它后面没有点)。
匹配IP地址
\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用
匹配Email地址
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用
匹配图片引用地址
\<img.*src *= *['"]*(\S+)["'].*\>
评注:可用在网页图片提取等地方
匹配帐号是否合法
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配密码是否合法
^[a-zA-Z]\w{5,17}$
评注:密码正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
匹配相关数字:
匹配国内电话号码
\d{3,4}[\s,-]?\d{7,8}
评注:匹配形式如 0511-4405222 或 021-87888822
匹配手机号码
1[3,4,5,8]\d[\s,-]?\d{4}[\s,-]?\d{4}+
评注:校验手机号码:必须以数字开头,除数字外,可含有“-” 或空格
匹配腾讯QQ号
[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
匹配中国邮政编码
[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字
匹配身份证号码
[1-9][0-9,X]{14,17}
评注:中国的身份证为15位或18位
匹配特定的数字
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
匹配字符串:
匹配中文字符
[\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符
包括汉字在内:[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行
\n\s*\r
评注:可以用来删除空白行
匹配首尾空白字符
^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配特定字符串
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
评注:最基本也是最常用的一些表达式
匹配多行文本
开始关键字([\s\S]*?)结束关键字
—-应用实例:—————–
<table>
<tr>
<td>单元格1</td><td>单元格2</td>
</tr>
<tr>
<td>单元格3</td><td>单元格4</td>
</tr>
</table>
正则表达式.创建 (“<tr>([\s\S]*?)</tr>”)