码迷,mamicode.com
首页 > 编程语言 > 详细

php、linux、javascript 正则表达式学习基础总结

时间:2015-07-29 19:35:55      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:linux、php、javascript、正则匹配

    正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

文章来源于作者个人空间http://www.ilovehai.com


PHP

正则表达式中包含三种元素分别为:量词、元字符、修饰符
量词              

语法                    描述
+             匹配任何至少包含一个前导字符串
*             匹配任何包含零个或多个前导字符串

?             匹配任何包含零个或一个前导字符串
.             匹配任意字符串

{x}           匹配任何包含 x 个前导字符串
{x,y}         匹配任何包含 x 到 y 个前导字符串

{x,}          匹配任何包含至少 x 个前导字符串
$             匹配字符串的行尾
^             匹配字符串的行首
|             匹配字符串的左边或者右边
()            包围一个字符分组或定义个反引用,可以使用\1\2 提取


元字符            

语法                    描述

[a-z]               匹配任何包含小写字母 a-z的字符串
[A-Z]               匹配任何包含大写字母 A-Z的字符串
[0-9]               匹配任何包含数字 0-9 的字符串
[abc]               匹配任何包含小写字母 a、b、c的字符串
[bc]               匹配任何不包含小写字母 a、b、c的字符串
[a-zA-Z0-9_]        匹配任何包含 a-zA-Z0-9 和下划线的字符串
\w                  匹配任何包含 a-zA-Z0-9 和下划线的字符串(同上)
\W                  匹配任何没有下划线和字母数字的字符串
\d                  匹配任何数字字符,和[0-9]相同
\D                  匹配任何非数字字符,和[^0-9]相同
\s                  匹配任何空白字符
\S                  匹配任何非空白字符
\b                  匹配是否到达了单词边界
\B                  匹配是否没有达到单词边界
\                   匹配正则中的特殊字符


修饰符

语法               描述
i                完成不区分大小写的搜索
m                在匹配首内容或者尾内容时候采用多行识别匹配
x                忽略正则中的空白
A                强制从头开始匹配
U                禁止贪婪匹配 只跟踪到最近的一个匹配符并结束


$pattern = ‘/([\d]*)\/([\d]*)\/([\d]*)/‘;
$string = ‘26/06/2014‘;
echo preg_replace($pattern, "$3/$2/$1", $string);


javascript


  创建方式:

      1. 

            var pattern = new RegExp(‘box‘);

            var pattern = new RegExp(‘box‘,‘ig‘);

      2.

            var pattern = /box/;

            var pattern = /box/ig;  

模式修饰符的可选参数
参数                         含义
i                          忽略大小写
g                          全局匹配
m                          多行匹配


RegExp 对象的方法
方法                              功能
test                在字符串中测试模式匹配,返回 true 或 false
exec                在字符串中执行匹配搜索,返回结果数组

例1: var pattern = /box/i;

        var str = "This is a Box!";

        alert(pattern.test(str));

例2: var pattern = /box/i;

        var str = "This is a Box!";

        alert(pattern.exec(str));


String 对象也提供了 4 个使用正则表达式的方法。

方法                                                                 含义
match(pattern)                                        返回 pattern 中的子串或 null
replace(pattern, replacement)                         用 replacement 替换 pattern
search(pattern)                                       返回字符串中 pattern 开始位置
split(pattern)                                        返回字符串按指定 pattern 拆分的数组



RegExp 对象的静态属性
属性                                    短名                                   含义

input                                    $_                   当前被匹配的字符串
lastMatch                                $&                   最后一个匹配字符串

lastParen                                $+                   最后一对圆括号内的匹配子串
leftContext                              $`                   最后一次匹配前的子串
multiline                                $*                   用于指定是否所有的表达式都用于多行的布尔值
rightContext                             $‘                   在上次匹配之后的子串



单个字符和数字
元字符/元符号                    匹配情况
.                              匹配除换行符外的任意字符
[a-z0-9]                       匹配括号中的字符集中的任意字符
[-z0-9]                       匹配任意不在括号中的字符集中的字符
\d                             匹配数字
\D                             匹配非数字,同[^0-9]相同
\w                             匹配字母和数字及_
\W                             匹配非字母和数字及_


字符类:空白字符
元字符/元符号                      匹配情况
\0                              匹配 null 字符
\b                              匹配空格字符
\f                              匹配进纸字符
\n                              匹配换行符
\r                              匹配回车字符
\t                              匹配制表符
\s                              匹配空白字符、空格、制表符和换行符
\S                              匹配非空白字符


字符类:锚字符
元字符/元符号                     匹配情况
^                               行首匹配
$                               行尾匹配
\A                              只有匹配字符串开始处
\b                              匹配单词边界,词在[]内时无效
\B                              匹配非单词边界
\G                              匹配当前搜索的开始位置
\Z                              匹配字符串结束处或行尾
\z                              只匹配字符串结束处


字符类:重复字符
元字符/元符号                         匹配情况
x?                              匹配 0 个或 1 个 x
x*                              匹配 0 个或任意多个 x
x+                              匹配至少一个 x
(xyz)+                          匹配至少一个(xyz)
x{m,n}                          匹配最少 m 个、最多 n 个 x


字符类:替代字符
元字符/元符号                    匹配情况
this|where|logo          匹配 this 或 where 或 logo 中任意一个


字符类:记录字符
元字符/元符号                    匹配情况
(string)                    用于反向引用的分组
\1 或$1                     匹配第一个分组中的内容
\2 或$2                     匹配第二个分组中的内容
\3 或$3                     匹配第三个分组中的内容

var pattern = /(\d*)\/(\d*)\/(\d*)/;

var str = ‘26/06/2014‘;
var result = str.replace(pattern,‘$3/$2/$1‘);
alert(result);


linux

字符类代表意义
[:alnum:]代表英文大小写字符及数字,即0-9,A-Z,a-z
[:alpha:]代表任何英文大小字符,即A-Z,a-z
[:lower:]代表小写字符,即a-z
[:upper:]代表大写字符,即A-Z
[:digit:]代表数字,即0-9
[:xdigit:]代表十六进制的数字类型,因此包括0-9,A-F,a-f的数字与字符
[:blank:]代表空格键与tab按键
[:graph:]除了空格与tab按键之外的其它所有按键
[:space:]任何会产生空白的字符,包括空格键,Tab键,CR等
[:cntrl:]代表键盘上面的控制按键,既包括CR,LF,Tab,Del等
[:print:]代表任意可打印字符
[:punct:]代表标点符号,即" ‘ ? ! ; : # $

基础正则表达式语法(RE语法):一个字符串如果是正则表达式表示的,则其中的任意字符被称为RE字符。

特殊字符为:
只支持普通正则表达式语法    ^  $  .  * \  [  ]  "  ‘      
支持扩展正则表达式语法        ^  $  .  * \  [  ]  "  ‘  +  ?  | ( ) 

基础RE字符意义与范例
^word意义:待查找的字符串(word)在行首
范例:查找行首为#开头的哪一行,并列出行号
grep -n ‘^#‘ regular_express.txt
word$意义:待查找的字符串(word)在行尾
范例:将行尾为!的那一行打印出来,并列出行号
grep -n ‘!$‘ regular_express.txt
.意义:代表一定有一个任意字符的字符(除换行符),在awk中可匹配换行符
范例:查找的字符串可以使(eve)(eae)(eee)等,即e与e之间一定要有一个字符,不能是(ee)!
grep -n ‘e.e‘ regular_express.txt 
\意义:转义字符,将特殊符号的特殊意义去除,将普通字符变为特殊字符。
范例:查找含有单引号‘的那一行
grep -n \‘ regular_express.txt  
*意义:重复0个到无穷多个前一个字符
范例:找出含有(es)(ess)(esss)等的字符串,注意,因为*可以是0个,所以es也是符合待查找字符串。另外,因为*为重复“前一个RE字符”的符号,因此在*之前一定要紧接着一个RE字符!例如任意字符则为.*
grep -n ‘ess*‘ regular_express.txt
[list]意义:从字符集合的RE字符里面找出想要选取的字符(不包括换行符),在awk中可以包含换行符。注意此时中括号里的\.*等特殊字符均变成一般字符(除了[])。
范例:查找含有(gl)或(gd)的那一行,需要特别留意的是,在[]当中代表一个待查找的字符,例如“a[afl]y”代表查找的字符串可以是aay,afy,或aly
grep -n ‘g[ld]‘ regular_express.txt
[n1-n2]意义:从字符集和的RE字符里面找出想要选取的字符范围
范例:查找含有任意数字的那一行。需特别留意,在字符集合[]中的减号-是有特殊含义的,它代表两个字符之间的所有连续字符(与编码顺序有关)
grep -n ‘[0-9]‘ regular_express.txt
[^list]意义:反向选择
范例:查找的字符串可以是(oog)(ood)但不能是(oot)
grep -n ‘oo[^t]‘ regular_express.txt
\{n\}
\{n,\}
\{n,m\}
意义:连续n到m个的前一个RE字符,若为\{n\}则是连续n个的前一个RE字符,若为\{n,\}则是连续n个以上的前一个RE字符 。
在支持扩展的正则表达式中用另一种形式,且n,m必须是0到255之间的整数:
注:本质上是扩展正则表达式的语法
范例:在g与g之间有2个到3个的o存在的字符串
grep -n ‘go\{2,3\}‘ regular_express.txt  


4 扩展的正则表达式语法

若要支持:

grep需加-E (或者使用到扩展符号时加\)         

sed需加-r  (或者使用到扩展符号时加\)        

awk,perl本身支持扩展这则表达式(也就是说awk中如果要引用(为普通字符要[(]如此使用。)

扩展RE字符意义与范例
+意义:重复一个或一个以上的前一个RE字符
o+代表一个以上的o
?意义:零个或一个的前一个RE字符
o?代表空或o
|意义:用或(or)的方式找出数个字符串,两边的字符串不能加额外的空格,
ABC|DEF表示ABC或DEF,A(BC|DE)F表示ABCF或ADEF
范例:去除空白行和行首为#的行
grep -Env ‘^$|^#‘ regular_express.txt  
()意义:找出“组”字符串,[]的引申
范例:查找glad或good这两个字符串,因为g与d是重复的,所以可以将la与oo以或的方式列于()中
grep -En ‘g(la|oo)d‘ regular_express.txt 
()+意义:重复一个或一个以上的前一个“组”
{n}
{n,}
{n,m}
与普通正则表达式含义一致,只是在支持扩展正则表达式中要用此形式,即awk、grep -E、sed -r 中使用。


5,元字符

元字符:是一种perl风格的正则表达式,只有一部分文本处理工具支持它,并不是所有的工具都支持。
相当于[字符集]的简写。

元字符意义和范例
\b意义:单词边界
范例:\bcool\b匹配cool但不匹配coolant,特殊字符后面不能加* ? +等量词
\B意义:非单词边界
范例:cool\B匹配coolant但不匹配cool,特殊字符后面不能加* ? +等量词
\d意义:单个数字字符
范例:b\db匹配b2b,但不匹配bcb
\D意义:单个非数字字符
范例:b\Db匹配bcb,但不匹配b2b
\w意义:单个单词字符(字母、数字与_)
范例:\w匹配1或a等,但不匹配%等
\W意义:单个非单词字符
\n意义:换行符
\s意义:单个空白字符,换页、制表、换行、回车以及空格。[\f\t\n\r ]
\S意义:单个非空白字符
\r意义:回车


6,几种有用的正则表达式

项目正则表达式
匹配正规文本中的单词\b[[:alpha:]]+\b

(^| )["({[]*book[]})"?,.:;!‘s ]*( |$)
匹配空行^$
匹配含有空格的空白行和空行^空格*$
匹配整个行^.*$
匹配一个或多个空格空格空格*
匹配s前面含有任意abc随机组合的字符串[abc]*s
匹配格式化的美元数额\$[空格0-9]*\.[0-9][0-9]
匹配电子邮件地址[A-Za-z0-9.]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}
匹配一个HTTP URLhttp://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}



linux通配符

shell通配符

注意,这里的通配符虽然和正则表达式相似,但是是基于bash解释器解析的,而正则表达式由正则引擎的软件(如awk,grep,sed等)解析,二者完全不同。


通配符字符

*代表0个或多个任意字符
?代表一定有一个任意字符
[ ][abcd],表示一个字符,或a或b或c或d
[-][0-9],表示一个数字,0到9之间的某个
[^][^abc],表示一个字符,且不是a、b、c


范例:

[python] view plaincopy

  1. [root@linux ~]# ls test*     #那个 * 代表后面不论接几个字符都予以接受  

  2. [root@linux ~]# ls test?     #那个 ? 代表后面"一定"要接"一个"字符  

  3. [root@linux ~]# ls test???   #那个 ??? 代表"一定要接三个"字符!  

  4. [root@linux ~]# cp test[1-5] /tmp  # 将 test1, test2, test3, test4, test5 若存在的话,就拷贝到 /tmp  

  5. [root@linux ~]# cp test[!1-5] /tmp # 只要不是 test1, test2, test3, test4, test5 之外的其它 test?拷贝到 /tmp  

  6. [root@linux ~]# cd /lib/modules/`uname -r`/kernel/drivers  # 系统先执行 uname -r 找出输出结果;将结果累加在目录上面,来执行 cd 的功能!  

  7.                      = cd /lib/modules/$(uname -r)/kernel  #另外,这个 quot (`) 的功能,也可以利用 $() 来取代喔!  

  8. [root@linux ~]# cp *[A-Z]* /tmp   #表示文件中包含大写字母  

  9. [root@linux ~]# ls -lda /etc/*[35]* #表示文件中包含数字3或者5.  


正则表达式(regular express)基本上是一种“表示法”,他是以行为单位来进行字符串的处理行为。只能使用在支持它的工具程序(如vi、grep、awk、sed中)。正则表达式与shell通配符的关系就像是局部变量和全局变量的关系(即以后遇到一个命令如果支持正则表达式,则通配符概念抛弃。否则使用通配符)。


本文出自 “秋风醉我心” 博客,请务必保留此出处http://ilovehai.blog.51cto.com/10569946/1679737

php、linux、javascript 正则表达式学习基础总结

标签:linux、php、javascript、正则匹配

原文地址:http://ilovehai.blog.51cto.com/10569946/1679737

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!