正则的使用 第4部分 (javascript,php)

时间: 2015-08-24 00:00 栏目: PHP 浏览: 3432 赞: 50 踩: 2 字体:

以下为本篇文章全部内容:

大家好 我叶子,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);