以下为本篇文章全部内容:
大家好 我叶子,sunny朋友
前面几节 讲了正则的 通配符 元字符 和修饰符,但是还没有具体的使用方式。在开发中我们经常用到的都是 数据检查 替换 以及 提取 。
数据检查
在 javascript 中 我们一般用的是 test 和 exec
test 只返回 true 或者 false
exec 返回 匹配到的内容 或者 null
<script> var a = /\d+/.test('ssss111ddd'); alert(a); var b = /\d+/.exec('ssss111ddd'); alert(b); </script>
这个可依照实际情况使用
在PHP中 使用 preg_match 来检查数据
<?php var_dump(preg_match('/\d+/', 'ssss111ddd', $arr)); print_r($arr);
同时 PHP也可以使用该行数来提取匹配到的内容
如果要匹配多个结果
<script> var a = 'ssss111ddd111kkk'.match(/\d+/g); console.log(a); </script>
<?php var_dump(preg_match_all('/\d+/', 'ssss111ddd111kkk', $arr)); print_r($arr);
在正则中 还需要注意 \ 这个符号
这个符号在PHP中可能是 转义符号 同时 在 正则中也是转义符号
那么 就可能会存在 双重转义
比如
aaa\ssss
在PHP中 我们 赋值给变量 $a 或者要匹配到 \ 的时候
$a='aaa\\ssss'; //实际内容为 aaa\ssss $reg='#\\\\#' //PHP实际内容为 #\\# (第一重转义是PHP需要的) (第2重是正则)正则实际匹配内容是 \ var_dump(preg_match_all('#\\\\#', $a, $arr)); print_r($arr); 所以在PHP中要匹配一个 转义符 就要4个\
我们来做一个例子:
例子1:比如 我们 的url 路径 如不是 /images 开头的 全部匹配 如果是 /images 的 不匹配
如 /images/a.png 这个我们不匹配
/home/xx 这个我们需要匹配
<?php var_dump(preg_match_all('#^/(?!images).*#', '/images/a.png', $a)); print_r($a); var_dump(preg_match_all('#^/(?!images).*#', '/home/xxx', $b)); print_r($b);
例子2:html 配套标签匹配
\1
<script> var a = '<a>ssss</a><a>ssss</a><div>ssss</div>'.match(/<(\w+)>(.*?)<\/\1>/g); for (var i in a) { a[i] = a[i].match(/<(\w+)>(.*?)<\/\1>/); } console.log(a); </script>
<?php var_dump(preg_match_all('/<(\w+)>(.*)<\/\1>/U', '<a>ssss</a><a>ssss</a><div>ssss</div>', $a)); print_r($a);
在正则后面的标签中 使用 \数字 表示 要前面匹配到的内容作为后面的一部分来匹配
例子3:匹配一个字符串 中间可能有转义!
如 xx="abcd\"xx\\xx";
<?php $code=<<<'EOF' xx="abcd\"xx\\xx" EOF; echo $code,"<br>"; var_dump(preg_match_all('@[^"\\\\]*(?:\\\\.[^"\\\\]*)*@', $code, $a)); print_r($a);
总赞数量:18274
总踩数量:128087
文章数量:29