正则学习整理 第1部分(javascript,php)

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

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

大家好 我是 叶子,sunny 的朋友。
今天 由我来向大家讲一下有关正则的使用知识。

正则是我们在开发中常用到的文字处理方法,而由于在不同环境中可能会有相应的变化,比如PHP和Javascript
下面也主要围绕这两门语言来讲一下如果使用好正则。阅读该文章之前我认为你已经是会使用一些简单的正则了。
先说一下正则要帮我们做什么?
首先我的理解,正则是帮我们查找字符的,查找需要的或者不需要的字符,记住是字符不是字符串。
在计算机中可以存在的字符都比较多,为了能快速进行判断,正则给我们归了类!


[...]方括号内的任意字符

<script>
alert(/[a]/.test('a'));
</script>


[^...]不在方括号内的任意字符

<script>
alert(/[^a]/.test('a'));
alert(/[^a]/.test('b'));
</script>


. 除了换行符和其他Unicode行终止符之外的任意字符
( 点  这个符号在PHP中 不同的修饰符下 有不同的代表意义,它 在默认情况下 是不包含换行符的,但是如果加上特定的修饰符 s 它可以包含换行符)

<script>
alert(/.k/.test("\nk"));
</script>
<?php 
var_dump(preg_match('/.k/s', "\nk"));
var_dump(preg_match('/.k/', "\nk"));


\w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9_]

<script>
alert(/\w+/.test('user_name'));
alert(/\w+/.test('_user_Name123'));
</script>
<?php 
var_dump(preg_match('/\w+/', 'user_name'));
var_dump(preg_match('/\w+/','_user_Name123'));


\W
 任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9_]

<script>
alert(/\W+/.test('%^&\*(( -+'));
alert(/\W+/.test('也包括中文'));
alert(/\W+/.test('_user_Name123'));
</script>
<?php 
var_dump(preg_match('/\W+/', '%^&\*(( -+'));
var_dump(preg_match('/\W+/', '也包括中文'));
var_dump(preg_match('/\W+/','_user_Name123'));


\d 任何ASCII数字,介于[0-9]


<script>
alert(/\d/.test('1'));
</script>


\D 除了ASCII数字之外的任何字符,等价于[^0-9]

<script>
alert(/\D+/.test('也包括中文'));
</script>


\s 任何Unicode空白符

<script>
alert(/\s+/.test("\t\r\n\0"));
</script>


\S 任何非Unicode空白符的字符

\b 元字符匹配单词边界。

<script>
alert(/\b[a-zA-Z]/.exec("user_name"));
alert(/\b[a-zA-Z]/.exec("8ser_name"));
</script>


如果是单词边界获取单词的第一个 字母 
第1个 限制单词边界第一个只能是字母 所以返回了 u
2个 限制是字母  而单词第一个是数字  所以返回了 null

\B  非元字符匹配单词边界。

<script>
    alert(/\B[a-zA-Z]/.exec("user_name"));
    alert(/\B[a-zA-Z]/.exec("u8er_name"));
    alert(/\B[a-zA-Z]/.exec("u8888"));
</script>

如果是单词边界获取单词的第一个 字母 
第1个 限制单词非边界第2个只能是字母 所以返回了 u
2个 限制是字母  而单词第2个是数字 所以匹配到第3个字母  所以返回了 e
3个 因为只有边界是字母 其他都是数字 所以只能返回 null

\n  查找换行符 还有其他符号等 \t \f \0 \v \r

<script>
    alert(/\n/.test("\n"));
</script>


\ddd  d代表8进制数字  是ASCII 的8进制编码 可从ASCII找到对应的8进制编码 

<script>
    alert(/\127/.test("W"));
</script>


\xdd  d 代表16进制数字  ASCII 16进制编码  

<script>
    alert(/\x57/.test("W"));
</script>


<?php
var_dump(preg_match('/\x57/', "W"));


\udddd  d 代表16进制数字  Unicode 16进制编码  

<script>
    alert(/\u0057/.test("W"));
</script>


在PHP中 是用 \x{dddd} 

<?php
var_dump(preg_match('/\x{0057}/', "W"));



字符区间,区间可以是 字符之间  也可以是 ASCII 字符区间

[a-z] 
[a-z0-9] 
[\141-\172]


<script>
    alert(/[a-z]/.test("w"));
    alert(/[\141-\172]/.test("w"));
</script>
<?php
var_dump(preg_match('/[a-z]/', "w"));
var_dump(preg_match('/[\x{0061}-\x{007A}]/', "w"));


非字符区间,区间可以是 字符之间  也可以是 ASCII 字符区间

[^a-z]
[^a-z0-9]
[^\141-\172]


<script>
    alert(/[^a-z]/.test("W"));
    alert(/[^\141-\172]/.test("W"));
</script>
<?php
var_dump(preg_match('/[^a-z]/', "W"));
var_dump(preg_match('/[^\x{0061}-\x{007A}]/', "W"));