您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
2-8 正则表达式考察点
发布时间:2020-10-03 12:50:33编辑:雪饮阅读()
正则表达式的中文匹配
Utf-8汉字编码范围是0x4e00-0x9fa5,utf-8要使用u模式修正符使模式字符串被当成utf-8
则匹配中文的正则表达式如:
<?php
function myDump($val){
echo "<pre>";
print_r($val);
echo "</pre>";
}
$str='中文';
$pattern='/[\x{4e00}-\x{9fa5}]+/u';
preg_match($pattern,$str,$match);
myDump($match);
运行结果如:
Array
(
[0] => 中文
)
正则表达式的中文匹配(gb2312)
在ANSI(gb2312)环境下,中文匹配的范围是两个段:0xb0-0xf7与0xa1-0xfe
并且在ANSI(gb2312)环境下,要使用chr将Ascii码转换为字符。
那么gb2312环境下中文匹配如:
<?php
function myDump($val){
echo "<pre>";
print_r($val);
echo "</pre>";
}
$str='中文';
$pattern='/['.chr(0xb0).'-'.chr(0xf7).']['.chr(0xa1).'-'.chr(0xfe).']/';
preg_match($pattern,$str,$match);
myDump($match);
运行结果:
Array
(
[0] => �
)
这里乱码了,因为我的环境是utf-8
正则表达式匹配html的img标签的src属性值
这是一个常见的需求,注意点就是贪婪匹配
?
匹配前面的子表达式(普通)零次或一次
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。
示例如:
<?php
function myDump($val){
echo "<pre>";
print_r($val);
echo "</pre>";
}
$str='<img alt="give" id="possession" src="beyond.jpg" />';
$pattern='/<img.*?src="(.*?)".*?\/?>/i';
preg_match($pattern,$str,$match);
myDump($match);
这里仅仅匹配了src中的双引号情况,单引号情况没有匹配
那么我们可以看到成效如:
正则表达式匹配html的img标签的src属性值(src单双引号同时匹配)
上面匹配img标签的src属性值仅仅匹配了双引号的情况下,其实可以进一步结合模与反向引用来实现单双引号同时匹配
<?php
function myDump($val){
echo "<pre>";
print_r($val);
echo "</pre>";
}
$str='<img alt="give" id="possession" src="beyond.jpg" />';
$pattern='/<img.*?src=(["|\'])(.*?)(\1).*?\/?>/i';
preg_match($pattern,$str,$match);
myDump($match);
则效果如
关键字词:正则表达式,反向引用,模,php,中文,uft-8,gb2312
下一篇:2-9 文件及目录处理相关考点