正则表达式(以下简称正则)是一种可以用于模式匹配和替换的强有力的字符工具,简单说我们可以利用正则对有规律的字符进行精确匹配、定位,从而可以过滤或者替换,爱飞软件内置了标准的正则解释器,便于大家使用。
在爱飞软件中,主要有3个地方可以使用正则
1.采集规则--标签处理--正则 :处理采集字段(ubb代码)
2.处理方案--过滤--EASY过滤:处理标题、正文(ubb代码)
3.p语言 :可以处理任意代码(ubb或html代码),注意某些字符需要二次转义,空行用函数过滤。
爱飞软件正则入门
1.只支持一行(一段),不支持跨行处理
2.有先后执行顺序,自上而下执行
3.以下特殊代码,为正则表达式公式代码,如果需要匹配这些字符,需要用反斜杠“\”转义,如\(表示(字符:
[ ] ? ^ $ + ( ){ } | .
4.正则规则括号的含义:一对括号代表一个$,便于“替换规则”提取、替换对应的字符
如正则规则: (编辑:)(.*) 替换规则:$2
表示匹配 以“编辑:”为开头的任意一行文字,执行后将过滤掉“编辑:”,保留“编辑:”之后的字符
$1代表第1对括号(编辑:),$2表示第2对括号(.*) ,在替换规则中$1未写,表示丢弃(删除)$1所代表的字符,当然,替换规则中$的排序可以按需要任意排列。
首先介绍最常用的2个正则代码,掌握后即可处理绝大部分使用场合:
常用正则代码 |
序号 |
代码 |
说明 |
1 |
.* |
.表示任意一个元字符,*为贪婪匹配,这样可以“最大化匹配”任意字符,软件内置了此通配字符按钮 |
2 |
.*? |
非贪婪匹配,尽可能少的匹配任意字符,不可写在表达式开头或结尾 |
举例如下:
正则示例 |
序号 |
例子及说明 |
正则规则 |
替换规则 |
1 |
过滤包含“下一页”的行,括号的位置可以自行改动,保持对应关系即可 |
(.*)(下一页)(.*) |
|
2 |
过滤包含“下一页”或“下页”的行,|表示或的关系 |
(.*下一页.*)|(.*下页.*) |
|
3 |
过滤括号及括号内文字,用.*?避免匹配太多误删文字 |
(\()(.*?)(\)) |
|
4 |
去除链接,保留关键字,按照括号的顺序,$2表示关键字(注意和下图区别) |
(\[url=.*?\])(.*?)(\[/url\]) |
$2 |
下图即上面第4条正则示例的原型,我们手工增加了?号并调整了括号顺序,这样正则表达式更精确、易于理解:

便于大家学习,下面表格整理更多正则代码和例子
其中 附件名正则替换在“处理方案--附件-附件名正则重命名”设置
更多正则代码及示例 |
序号 |
正则代码 |
代码、格式说明 |
正则示例描述 |
处理字符 |
使用正则规则 |
替换规则 |
处理结果 |
1 |
\ |
将特殊字符转义 [ ] ? ^ $ + ( ){ } | . |
过滤所有包含“编辑”字样的中括号提示 |
[最后由……编辑] |
(\[.*?编辑.*?\]) |
|
|
2 |
\d |
1个小写数字 |
|
|
|
|
|
3 |
\d+ |
1个及以上小写数字 |
过滤包含数字的括号,如附件大小 |
本地下载(8.2KB) |
(\(.*?\d+.*?\)) |
|
本地下载 |
4 |
\d{2} |
{数字}表示重复次数 |
替换日期格式 |
2012年10月 |
(\d{2})(年)(\d+)(月) |
$1-$3 |
2012-10 |
5 |
\d{2,} |
2个及以上小写数字 |
|
|
|
|
|
6 |
\d{1,3} |
1-3个小写数字 |
|
|
|
|
|
7 |
\D |
任意非数字字符 |
|
|
|
|
|
8 |
[BB]+ |
匹配字符BB,1次及以上 |
|
|
|
|
|
9 |
\w |
1个大小字母、数字 |
过滤网址格式如:
字母.字母.字母 |
WWW.baidu.com |
(\w+)(\.)(.*?)(\.)(\w+) |
|
|
10 |
\W |
1个非单词字符 |
|
|
|
|
|
11 |
\s |
任意空白字符,如空格 |
删除标题内空格 |
正 则 入门 |
(\s+) |
|
正则入门 |
12 |
\S |
任意非空白字符 |
任意一行(不包含空格)加前缀,比如标题、附件名加前缀 |
正则入门 |
(\S+) |
爱飞-$1 |
爱飞-正则入门 |
13 |
.* |
任意字符 |
只给rar附件加前缀,其他后缀一样处理,包括图片 |
教程.rar |
(.*\.rar) |
爱飞-$1 |
爱飞-教程.rar |
14 |
|
换行符号(不可视) 只有p语言可用 |
|
|
|
|
|
15 |
\r |
回车符号只有 p语言可用 |
|
|
|
|
|
p语言中的用法示例
p语言有3个字符 ' " \ 需要转义,比如正则代码\d,因为有一个反斜杠,写到p语言内还需要再加一个反斜杠\\d。
下例为一段完整的p语言代码,删除文章标题中的空白字符,其中regexrep为正则函数,正则中\s表示空字符,因为\在p语言里面要转义,所以需要多加一个\
- void main(void)
- {
- $m_ntitle=regexrep($m_ntitle, "(\\s+)", "");
- //双斜杠为注释说明: 标题变量=正则替换函数(标题变量, "正则规则", "替换规则");
- }
|