前言
正则是一个类似于医生的鬼画符般的存在,所以我要认真记录下学习正则的过程。在python中我会经常遇到爬取网站源码后需要对源码进行清洗获得所需的信息,一般的我都是用beautifulsoup这个包,这个包容易使用,可谓是开包即用,但也有缺点就是速度慢,在数据量大的时候可谓是十分苦恼。而正则表达式则是可以解决这个困扰,一般地我都是使用(*.?)这个贪婪匹配来匹配所需字段,但只会这个确确实实不行。在php中正则可以广泛应用于防止各类攻击,总之一句话,正则表达式是十分重要的!!!
参考资料
定界符
/$%^@
示例
/正则表达式/
$正则表达式$
简单匹配
$zz = '/a/';
$string = 'ddfdjjvi2jfvkwkfi24';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
这里preg_match()函数第一个参数为正则表达式,第二个为所需要匹配的字符串,第三个为匹配的结果,返回值为匹配的结果数,若无则返回0,$match是一个数组。
原子 说明
\d 匹配一个0-9
\D 除了0-9以外的所有字符
\w a-zA-Z0-9_
\W 除了0-9A-Za-z_以外的所有字符
\s 匹配所有空白字符\n \t \r 空格
\S 匹配所有非空白字符
[ ] 指定范围的原子
关于[]的使用
/[a-z]/匹配在a-z范围的原子
/[1-6]/匹配在1-6范围的原子
/[^xxx]/不匹配在xxx范围内的原子\
元字符
*
是代表匹配前面的一个原子,匹配0次或者任意多次前面的字符。
+
匹配一次或多前前面的一个字符
? 前面的字符可有可无【可选】 有或没有
. 更标准一些应该把点算作原子。匹配除了\n以外的所有字符
^
必须要以抑扬符之后的字符串开始
$
必须要以$之前的字符结尾
\b 词边界
\B 非边界
{m} 有且只能出现m次
{n,m} 可以出现n到m次
{m,} 至少m次,最大次数不限制
() 改变优先级或者将某个字符串视为一个整体,匹配到的数据取出来也可以使用它
更多的在此正则表达式 – 元字符 | 菜鸟教程
元字符使用示例
/\d+/ 匹配0-9第一个数字之后连续的数字,至少匹配一次
/\d*/ 匹配0-9第一个数字之后连续的数字,匹配零次或任意多次
/./ 匹配任意字符
/b|c/ 匹配b或c两个字符之一
/ab(c|b)cd/ 匹配abccd或者abbcd两个之一
关于$和^
^ 是表示匹配必须以^之后的字符作为开头的字符
如我的网站redmango.top,^ red表示当前匹配必须以red为开头的字符,若有多个字段,如redmango,bluemango,若我们仅仅需要匹配第一个,则可以使用/^red\w+/,此时可以匹配得所需以red开头的字段。
$
是表示匹配必须以$之前的字符作为开头的字符
使用方法与^相似
关于\b和\B
\b词边界,就是指必须要在最前或者最后;\B非边界,就是不能在一个正则表达式的最前或者最后。
以示例作说明:
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
\B 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
如this is apple. /\bis\b/ 匹配的是is,而/\Bis/匹配的则是this中的is
关于{}的用法
{n}
$pattern = '/\b\w{3}\b/';
$string1 = "this is a and that is b";
这个示例可以匹配指定长度的字符,此时输出为a
{n,m}
{n,m}匹配n到m次
{n,}
{n,}匹配至少n次
{,m}
{,m}匹配最多m次
正则匹配的模式修正符
i 模式中的字符将同时匹配大小写字母.
m 字符串视为多行
s 将字符串视为单行,换行符作为普通字符.
x 将模式中的空白忽略.
A 强制仅从目标字符串的开头开始匹配.
D 模式中的美元元字符仅匹配目标字符串的结尾.
U 匹配最近的字符串.
e模式仅限于在preg_replace中使用
使用时将修正符置于定界符之后,示例:/aa/i
此时同时匹配aa和AA
匹配替换
preg_replace(replacement,
replacement为需要替换的字符串,$string为替换的内容
常用正则函数
preg_filter 执行一个正则表达式搜索和替换
preg_grep 返回匹配模式的数组条目
preg_match 执行一个正则表达式匹配
preg_match_all 执行一个全局正则表达式匹配
preg_replace_callback_array 传入数组,执行一个正则表达式搜索和替换使用回调
preg_replace_callback 执行一个正则表达式搜索并且使用一个回调进行替换
preg_replace 执行一个正则表达式的搜索和替换
preg_split 通过一个正则表达式分隔字符串
欢迎访问我的博客www.redmango.top