正则的修饰符 第3部分 (javascript,php)

时间: 2015-08-24 00:00 栏目: PHP 浏览: 5351 赞: 10 踩: 0 字体:

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

大家好 我是叶子,sunny的朋友。

下面接着来讲 正则的修饰符,在正则中 修饰符应该是最不容易了解的部分。有时候加上或者不加上修饰符可能会得到不同的结果!
在javascript 中 修饰符 比较少,或者说我了解的比较少!

i 修饰符 这个修饰符 估计大家基本上都知道 他是干嘛的 
对 就是 忽略大小写 PHP 和 Javascript 都支持该修饰符

<script>
    var a = 'Wac'.match(/[a-z]+/i);
    console.log(a);
</script>
<?php
preg_match('/[a-z]+/i', 'Wac', $arr);
print_r($arr);


g 全局匹配 这个修饰符 只有 Javascript 支持 我理解等同于 php的 preg_match_all

<script>
    var a = 'Wac cAc'.match(/[a-z]+/gi);
    console.log(a);
</script>
<?php
preg_match_all('/[a-z]+/i', 'Wac cAc', $arr);
print_r($arr);

m 修饰符  加上这个修饰符 后 ^ 符号由原来的开始将变成 行前  $ 结束将变成 行后

<script>
    var a = '\n\
cAc\n\
kkk'.match(/^[a-z]+$/mgi);
    console.log(a);
</script>
<?php
preg_match_all('/^[a-z]+$/mi', '
cAc
kkk', $arr);
print_r($arr);


javascript 只有上面 3个修饰符. 下面将讲解PHP的其他修饰符

s 修饰符 在正则 中 . 并不包括 \n 等换行符,而加上该修饰符 则 . 包括换行符 在javascript 中相当于 [\w\W] 或者 [\d\D]

<script>
    var a = 'a\n\
cAc\n\
kkk'.match(/^a[\w\W]+kkk$/i);
    console.log(a);
</script>
<?php
preg_match_all('/^a.+kkk$/si', 'a
cAc
kkk', $arr);
print_r($arr);

x 修饰符 在正则中忽略空白字符 和忽略#注释

<?php
preg_match_all('/
[a-z]+ # 查找字母
  |
[0-9]+ # 查找数字
/x',"abc89cc", $arr);
print_r($arr);


D
 修饰符  强制 $ 不匹配最后一个 换行符 默认情况下是匹配的

<?php
preg_match_all('/^abc$/',"abc\n", $arr);
print_r($arr);
preg_match_all('/^abc$/D',"abc\n", $arr);
print_r($arr);

如果已经使用了m 修饰符 这个修饰符会被忽略


S 修饰符 这个修饰符 我很少用到 ,安装官方的意思来讲 主要是用于性能方面优化的。如果多次匹配的时候可以加上


U 修饰符  和 *? 类似 获取最短的贪婪匹配

<?php
    preg_match('/a[0-9b]*b/U', 'a1234567b89b', $matches1);
    print_r($matches1);
    preg_match('/a[0-9b]*b/U', 'ab', $matches1);
    print_r($matches1);
    preg_match('/a[0-9b]*?b/', 'a1234567b89b', $matches);
    print_r($matches);
    preg_match('/a[0-9b]*b/', 'a1234567b89b', $matches2);
    print_r($matches2);

这个 修饰符  和  *? 其实在使用的过程中还是有一些区别的~~ U 会把所有的 * 全部变成了 *? 而 在实际中 我们可能部分是 * 部分是 *?
不小心的话 有可能会得到不符合要求的结果
所以 要注意代码中到底是使用U 还是使用*? +? 等

X 修饰符 这个修饰符我很少用到,主要是严格正则的语法,不兼容的语法可能不能通过执行。


u 修饰符  这个是对utf-8 的支持选项