正则表达式是什么?正则表达式
在编写处理字符串的程序或网页时,常常会有查找符合某些复杂规则的字符串的须要。正则表达式就是用于描述这些规则的工具,也就是对文字进行模糊匹配的语言。能够完成如下功能:windows
(1)测试字符串的某个模式;(2)替换文本;(3)根据匹配模式才可以字符串中提取子字符串。ide
元字符“?”与“()”函数
?表示紧靠前的选项无关紧要,例:abc能匹配ab和abc工具
()表示子匹配,例:a(bc)?能匹配a和abc。测试
11111-1234匹配模式“\d{5}(-\d{4})?",连续匹配两个相同数字用(\d)\1,连续匹配五个相同数字(\d)\1{4};1221匹配模式(\d)(\d)\2\1。spa
\d表示匹配任意一个数字字符,{5}表示紧靠其前的元素项重复五次code
字符转义对象
若是你想查找元字符自己的话,好比你查找.,或者*,就出现了问题:你没办法指定它们,由于它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。所以,你应该使用\.和\*。固然,要查找\自己,你也得用\\blog
例如:unibetter\.com匹配unibetter.com,C:\\Windows匹配C:\Windows。
RegExp显示函数:newRegExp=("pattern"[,"flags"]);
RegExp隐示函数:/pattern/[flags].
"\"是转义字符,构建显示函数RegExp实例对象时,将"\"替换为"\\"。例:varre1=newRegExp=("\\d{5});等价于varre2=/\d{5}/;
元字符分类
1、限定符
{n}重复n次,例:o{2}不能与bob中o匹配,能够与food或foooood中两个或连续两个匹配。
{n,}重复n次或更屡次,最少出现n次
{n,m}重复n到m次,至少n次,至多m次
+必须出现一次或连续屡次,等效于{1,}
*出现连续屡次或零次,"zo*"与"z"和"zoo"都能匹配,等效于{0,}
?最多出现一次,等效于{0,1}
贪婪匹配与非贪婪匹配
默认状况下正则表达式使用最长匹配原则,即贪婪匹配。例:“zoom”匹配“zo?”的部分换为“r”,结果是“rom”,匹配“zo*”替换成“r”,结果是“rm”,而不是“room”。
当字符“?”紧跟其余限定符以后,匹配模式变为最短原则。例:“fooood”中,“fo+?”匹配的是“fo”,而“fo+”匹配“foooo”部分。
选择匹配符
“|”例:chapter|section1匹配的是“chapter”“section1”,(chapter|section)1匹配“chapter1”“section1”。
2、分组组合与反向引用符
分组组合
将表达式中某部份内容组合起来的符号。(pattern)将pattern部分组合成一个可统一操做的组合项和子匹配,若要匹配字面意义上的括号字符“(”和“)”,在正则表达式中要分别使用“\(”和
“\)”。
(\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个总体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。IP地址中每一个数字都不能大于255,因此只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
反向引用
用于匹配分组组合捕获到的内容的标识符。\num匹配编号为num的缓冲区所保存的内容,这种方式为子匹配的反向引用,能提供表示相同匹配项的能力。例:匹配连续五个数字字符。\d{5},能够匹配12345,如果55555,须要使用(\d)\1{4}。匹配“itisthecostofofgasolinegoingupup?"中连续重复的单词部分,用/\b([a-z]+)\1\b/gi。其中\b用于匹配单词的边界。
非捕获匹配
(?:pattern)将pattern部分组合成一个可统一操做的组合项,但不把这部分当子匹配项捕获,匹配的内容不存在缓冲区内供之后使用。适用于必须进行组合但又不想让组合部分具备子匹配特色状况。
例:(?:abc)?,"industry|industries"不能改写成industry(ylies),如不须要引用或检索括号中表达式所匹配结果,写为industry(?:ylies)。
正向“预测先行”匹配
(?=pattern),被搜索的字符串中必须有pattern部分匹配的内容,但不做为匹配结果处理,也不会存在缓冲区中。例:windows(?=NT|2000)只与windows2000或windowsNT中的windows匹配,而不与windows2003中的windows匹配。该匹配结果只是windows部分。
反向“预测先行”匹配
(?!pattern),被搜索字符串中不能有pattern部分匹配的内容,功能同上。例:windows(?!NT|2000)不与windows2000或windowsNT中的windows匹配,而与windows2003中的windows匹配。