php、linux、javascript 正则表达式

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的字符串
[abc] 匹配任何不包含小写字母 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 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束

* preg_filter — 执行一个正则表达式搜索和替换
* preg_grep — 返回匹配模式的数组条目
* preg_last_error — 返回最后一个PCRE正则执行产生的错误代码
* preg_match_all — 执行一个全局正则表达式匹配
* preg_match — 执行一个正则表达式匹配
* preg_quote — 转义正则表达式字符
* preg_replace_callback — 执行一个正则表达式搜索并且使用一个回调进行替换
* preg_replace — 执行一个正则表达式的搜索和替换
* preg_split — 通过一个正则表达式分隔字符串

$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] 匹配括号中的字符集中的任意字符
[a-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.txtword$
意义:待查找的字符串(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.][email protected][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. [[email protected] ~]# ls test #那个 代表后面不论接几个字符都予以接受
  2. [[email protected] ~]# ls test? #那个 ? 代表后面"一定"要接"一个"字符
  3. [[email protected] ~]# ls test??? #那个 ??? 代表"一定要接三个"字符!
  4. [[email protected] ~]# cp test[1-5] /tmp # 将 test1, test2, test3, test4, test5 若存在的话,就拷贝到 /tmp
  5. [[email protected] ~]# cp test[!1-5] /tmp # 只要不是 test1, test2, test3, test4, test5 之外的其它 test?拷贝到 /tmp
  6. [[email protected] ~]# cd /lib/modules/uname -r/kernel/drivers # 系统先执行 uname -r 找出输出结果;将结果累加在目录上面,来执行 cd 的功能!
  7. = cd /lib/modules/$(uname -r)/kernel #另外,这个 quot (`) 的功能,也可以利用 $() 来取代喔!
  8. [[email protected] ~]# cp [A-Z] /tmp #表示文件中包含大写字母
  9. [[email protected] ~]# ls -lda /etc/[35] #表示文件中包含数字3或者5.

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

更多文章请关注:http://www.ilovehai.com

原文地址:http://blog.51cto.com/6706782/2107202

时间: 2024-11-07 07:32:54

php、linux、javascript 正则表达式的相关文章

JavaScript正则表达式详解

在JavaScript中,正则表达式由RegExp对象表示.RegExp对象呢,又可以通过直接量和构造函数RegExp两种方式创建,分别如下: //直接量 var re = /pattern/[g | i | m]; //构造函数 var re = new RegExp(["pattern", ["g" | "i" | "m"]]); 其中,末尾的可选字符(g.i和m)分别表示: g: 模式执行一个全局匹配.简而言之,就是找到

javascript正则表达式修饰符之multiline(/m)的使用

javascript正则表达式有3种修饰符/i./m和/g./i是我们最常用,也是最好理解的,代表正则表达式匹配的时候不区分大小写. var regex = /abc/i; alert(regex.test("aBc"));//true /m代表多行模式multiline,如果目标字符串中不含有换行符\n,即只有一行,那么/m修饰符没有任何意义. var multiline = /abc/m; var singleline = /abc/; //目标字符串不含换行符\n var tar

javascript 正则表达式补充

定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%>','g'); 2. 字面量 var reg=/<%[^%>]%>/g; g: global,全文搜索,默认搜索到第一个结果接停止 i: ingore case,忽略大小写,默认大小写敏感 m: multiple lines,多行搜索 元字符 正则表达式让人望而却步以一个重要原因就是其转

Linux Basics 正则表达式 grep

grep全称是:Global search Regular Expression and Printing全局搜索正则表达式并显示出来 使用正则表达式来描述选择条件. 取行选择:选取行的筛选条件,给定选取条件,只显示符合条件的行,或者只显示不符合条件的行. 对于类似的操作有三个命令:grep; egrep; fgrep grep:默认支持基本正则表达式: egrep:扩展正则表达式: fgrep:不支持正则表达式元字符,搜索字符串的速度快: 正则表达式是一类字符所书写的模式(pattern)  

linux之正则表达式

文件查找的需要: grep:(GLOBAL Research) 根据模式(网)去搜索文本,而后将符合模式的文本行显示出来. [部分匹配,显示时显示一行] Pattern:模式.(文本字符以及正则表达式元字符组合而成的匹配条件) 例子:grep  'root' /etc/passwd grep所支持的选项: -i:忽略大小写 --color 显示颜色 alias grep='grep --color' -v: 反向查找,显示没有被模式匹配的行 -o:只显示被模式匹配出来的字符串,每个字符串显示为一

javascript正则表达式定义的方法是什么

javascript正则表达式的2种定义方法:一种是直接调用RegExp(),第二种是直接用字面量来定义,即var re = /正则规则/; js正则表达式的2种定义方法本质都是调用RegExp()方法 在调用同一段正则代码的时候,ECMAScript3和ECMAScript5中表现完全不一样 function reg(){ var re = /\sjavascript/; return re; } 分别在ECMAScript3和ECMAScript5中调用reg()方法多次 在ECMAScri

web前端之JavaScript正则表达式

web前端之JavaScript正则表达式 后面有代码: \d 表示数字 \d? ?表示0个或者一个 \d+ +表示一个或者多个 \d{3} 表示三个 \d{3,5} 表示三到五个 \d{3,} 表示至少出现3次 \d* *表示0到任意个 \b 表示单词边界 \B 表示非单词边界 \bis\b 表示查找" is "的 . 表示任意字符 \ 表示转译 http:(\/\/.+\.jpg) 用()进行分组 $1 获取其内部东西 []表示或 ^表示开头 $表示结尾 g表示全局 \d{4}[/

JavaScript - 正则表达式举例

JavaScript - 正则表达式举例 正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功:一旦有匹配不成功的字符则匹配失败. 正则表达式通常用于在文本中查找匹配的字符串.Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符:非贪婪的则相反,总是尝试匹配尽可能少的字符.例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb".而如果使用非贪婪

javascript正则表达式简介

javascript正则表达式 javascript正则表达式 regular expression是一个描述字符模式的对象: ECMAScript中的RegExp类表示正则表达式: String和RegExp都定义了使用正则表达式进行强大的模式匹配.文本检索和替换的函数: 正则表达式主要用来验证客户端的输入数据: Ⅰ.创建正则表达式 类似于创建字符串,可以使用new运算符也可以采用字面值: 参数 含义 g 全局匹配 i 忽略大小写 m 多行匹配 下文中的javascript代码是通过 Ecli

自己实现的一款在线Javascript正则表达式测试器——JRE-Parser

本文最初发布于我的个人博客:http://jerryzou.com/posts/jreparser/ 昨天在看<正则表达式30分钟入门教程>的时候,看到博主自己实现了一个C#写的正则测试器,看上去挺方便的样子.但是我自己又不太喜欢乱装东西,所以寻思着能不能自己实现一个javascript正则表达式测试器.于是几十行代码实现了这样一个正则测试器. 先展示一下0.1版本的效果图吧~ 页面还比较简单,但是基本功能算是有了.可以正常使用~. 关于怎么从用户的输入中提取正则表达式的过程多亏@依云大神提点