笔记2
一、Javascript中的正则表达式
1. RegExp 对象
可以通过RegExp对象的实例来使用模式。创建实例的方法有两种:
l 将一个正则表达式模式指定给一个变量
MyRegEx = /^silky/;
l 通过RegExp构造函数创建一个新的RegExp对象的实例
MyRegEx = newRegExp(“^silky”);
RegExp 属性:
l m : multiline , 多行匹配;
l i : ignore Case ,不区分大小写;
l g: global , 全局匹配 ;
l lastIndex: 表示最后一个匹配项出现的位置;
l source: 保存正则表达式模式。
RegExp对象中的常用方法:
l test()方法 :以一个字符串为参数,测试该字符串是否存在符合正则表达式模式的匹配项。
l exec()方法 :以一个字符串为参数,返回匹配的数组。
2. String 对象
字符串在Javascript中指的是由一对双引号或单引号包围的Unicode字符序列。String对象表示一个字符串。
与正则表达式有关的方法:
l match()
需要一个RegExp对象作为参数,并测试相应的字符串是否匹配与该对象关联的模式。返回一个数组。
l replace()
两个参数,第一个是RegExp对象,第二个是替换匹配文本的字符串。
l search()
以一个RegExp对象为参数,返回字符串中第一个匹配项的位置。无则返回-1.
二、PHP中的正则表达
1. ereg() 函数集
ereg()函数集以POXI正则表达式为基础。下表介绍函数集包含的函数:
函数 |
说明 |
ereg() |
以区分大小写的方式将一个字符串与正则表达式模式进行匹配 |
eregi() |
以不区分大小写的方式将一个字符串与正则表达式模式进行匹配 |
ereg_replace() |
以区分大小写方式匹配一个正则表达式,如果存在匹配项则进行替换 |
eregi_replace() |
以不区分大小写方式匹配一个正则表达式,如果存在匹配项则进行替换 |
split() |
区分大小写的情况下匹配正则表达式,将字符串拆分为一个子字符串数组 |
spliti() |
不区分大小写的情况下匹配正则表达式,将字符串拆分为一个子字符串数组 |
sql_regcase() |
根据指定的字符串创建一个在不区分大小写的情况下与之匹配的有效正则表达式模式 |
l ereg() 函数
三个参数,第三参数可选。首参是字符串表示的正则表达式模式,第二个参数是测试string,第三个参数是保存匹配项结果(包括捕获数值)的数组。返回bool值。
l eregi()函数
除了不区分大小写之外,与ereg() 函数没什么区别。
l ereg_replace()函数
以区分大小写的方式匹配一个模式,若成功匹配,用指定的替换文本替换。若找到多处匹配,则全部替换。返回替换后的文本。(若无匹配项,返回原文)
三个参数。首参是正则表达式模式,第二参数是替换文本,第三参数是测试string。
l eregi_replace()函数
以不区分大小写的方式匹配替换文本。
l split()函数
可以根据正则表达式匹配的字符(序列)或位置将字符串拆分成独立的子字符串,并返回。含有三个参数。首参是正则表达式模式,第二个参数是测试字符串,第三个参数可选,为整数值,表示用于匹配和拆分的最大次数。
例:
list ($num1 ,$num2 , $num3 ) = split(“[-/.]”,”2013-11-03”,3);
l spliti()函数
不区分大小写。功能用法同split()一样。
l sql_regcase() 函数
创建正则表达式。
2. Perl兼容正则表达式
Perl兼容正则表达式(PCRE)提供了比eieg()更强大的正则表达式支持。下表为PCRE支持的函数:
函数 |
说明 |
preg_match() |
在指定的测试字符串中尝试匹配指定的模式 |
perg_match_all() |
在指定的测试字符串中尽可能多地尝试匹配指定的模式 |
preg_grep() |
在数组中查找一个正则表达式模式的匹配项 |
preg_quote() |
用于将一个正则表达式模式中的每个字符都使用反斜杠转义 |
preg_replace() |
替换测试字符串中匹配正则表达式模式的匹配项 |
preg_replace_callback() |
与preg_replace()类似,但替换字符串由一个回调函数定义 |
preg_split() |
将测试字符串在与正则表达式模式匹配的位置拆分为子字符串组 |
l 模式定界符
PCRE中,若要制定一个正则表达式,必须将模式包含在一对定界符中,而定界符则必须包含在一对双引号括号里。默认定界符为一对正斜杠。可用任意非字母字符作为定界符。
l PCRE中的匹配修饰符
PHP中的PCRE有效的匹配修饰符(加在模式的第二个限定符后,被引号包含):
匹配修饰符 |
说明 |
i |
是匹配不区分大小写 |
m |
多行。改编^和$元字符作用。多行匹配下,分别匹配一行开始、结束位置 |
s |
更改句点元字符作用,匹配任何字符,包括换行符 |
x |
更改模式中空白符处理方式。使用下未转义的空白符会被忽略 |
A |
强制匹配测试字符串的开始位置 |
D |
若设置D修饰符,$只匹配测试字符串的结束位置。若设置m,则D被忽略 |
U |
修改模式的“贪婪性”。设置U后,默认行为将变为懒惰的。 |
X |
开启Perl 兼容的行为 |
e |
只应用于prep_replace()函数,在替换字符串中对逆向引用做正常的替换,将其作为PHP代码求值,并用结果来替换所搜索的字符串 |
l 模式匹配优先级
顺序 |
元字符 |
描述 |
1 |
\ |
转义符号 |
2 |
()、(?:)、(?=)、[] |
模式单元和原子表 |
3 |
*、+、?、{n}、{n,m}、{n,} |
重复匹配 |
4 |
^、$、\b、\B、\A、\Z |
边界限制 |
5 |
| |
模式选择 |
l 使用preg_match()函数
三个参数,首参是一个正则表达式模式,用限定符包含。第二参数是测试字符串。第三个参数可选,为一个变量。在存在匹配项的情况下,会返回给该变量一个包含匹配项的数组。返回true或false。
l 使用preg_match_all()函数
与preg_match()函数类似,不同之处为前者在第一次匹配之后就会停止搜索。而后者会一直搜索到测试字符串的结尾,获取所有匹配的结果。
函数返回一个int值,为匹配的个数。函数含有四个参数。首参为一个正则表达式模式,第二参数为测试字符串,第三个参数为一个数组变量,匹配的结果会存入其中。函数第四个参数可选,根据其指定的顺序保存每次出现的匹配结果至三参数组中。有以下两个预定义值(设三参为$matches):
PREG_PATTERN_ORDER:默认值。对结果排序,使$matches[0]保存所有匹配的值的数组;$matches[1]保存第一个括号中的子模式所匹配的所有的值的数组。以此类推。
PREG_SET_ORDER: 对结果排序,使得$matches[0]保存第一组匹配项的值的数组,$matches[1]为保存第二组匹配项的值的数组。以此类推。
l 使用preg_grep()函数
该函数能基于数组中的元素来匹配正则表达式模式。函数接收两个参数,首参是正则表达式,第二个参数为一个数组。返回一个数组,保存的是参数数组中满足匹配的值。
l 使用preg_quote()函数
函数用于转义运行时生成的字符串中需要转义的字符。
l 使用preg_replace()函数
函数会尽可能多的在测试字符串中匹配一个正则表达式,将每一个匹配的子字符串用指定的文本替换。函数四个参数。首参是正则表达式模式,二参是替换文本,三参是测试字符串。四参可选,为一个值,表示最多替换次数。函数返回替换后的字符串。
另外,使用‘e’匹配修饰符可以使替换文本中的反向引用被解释为PHP代码,并将相应结果替换测试字符串。具体介绍:
使用‘\\n’形式依次引用正则表达式中的模式单元。每个此引用将被替换成为与第n个括号内的子模式所匹配的文本,n为0~99 。 \\0 指整个模式所匹配的文本,对左圆括号从左到右计数(1开始)以取得子模式的数目。当出现在一个逆向引用后面紧跟一个数字时候,如“\\11”,会造成歧义。不明白是一个\\11的逆向引用还是一个\\1逆向引用后面加一个数字“1” 。解决方法为使用“\${1}1”代替。表明是一个”\\1”后面加上一个数字“1”。
使用preg_replace()函数时,有一个专门为它提供的模式修正符“e”,只有preg_replace()函数使用此修饰符。若设定了e,函数在测试字符串中对逆向引用做正常的替换,将其作为PHP代码求值,并用结果替换所搜索的字符串。
l 使用preg_replace_callback()函数
该函数与preg_replace()函数本质上相同,只是二参是一个回调函数。此回调函数可以为用户定义的任何函数。
l 使用preg_split()函数
preg_split()函数能够根据正则表达式拆分测试字符串。返回一个拆分后的子字符组成的数组。接收四个参数。首参为正则表达式,二参为测试字符串。三参可选,为一个指定最大拆分次数的整数值,四参是表示所设置的标志flag值。
对于四参,可以使下列标记的任意组合(用按位或运算 | 组合)
PREG_SPLIT_NO_EMPTY: 只返回非空的成分;
PREG_SPLIT_DELIM_CAPTURE: 定界符模式中的括号表达式也会被捕获并返回
PREG_SPLIT_OFFSET_CAPTURE : 对每个出现的匹配结果也同时返回其附属的字符串偏移量。这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在测试字符串中的偏移量。
3. PHP支持的元字符
l ereg()函数族支持的元字符
不支持\d , \D ,\w , \W
l PHP中使用POSIX字符类
常用POSIX字符类:
字符类 |
说明 |
[:alnum:] |
匹配字母或数字字符 |
[:alpha:] |
匹配字母字符 |
[:space:] |
匹配空白符 |
[:blank:] |
匹配空格符或制表符 |
[:digit:] |
匹配数字 |
[:lower:] |
匹配小写的字母字符 |
[:upper:] |
匹配大写的字母字符 |