正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下:
测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。
一、
^ : 表示一行文字的开始位置
$ : 表示一行文字的结束位置
[] : 表示匹配括号中字符中的一个
出现在[]中的-:为范围符号 如:[a-z]表示a到z中的任意一个字符;
出理在[]中的^:为否定符号 如:sin[^a]表示不包含a字符;
. : 表示匹配除换行符之外的任何字符 如: "07.04.76" 将匹配 07/04/76, 07-04-76,07.04.76。
/s:用于匹配单个空格符,包括tab键和换行符;
/S:用于匹配除单个空格符之外的所有字符;
/d:用于匹配从0到9的数字;
/w:用于匹配字母,数字或下划线字符;
/W:用于匹配所有与/w不匹配的字符;
/-: 表示连接符(连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“/”。
). 如:"[0-9]{3}/-[0-9]{2}/-[0-9]{4}" 将匹配 999-99-9999 ;
| : 表示选项字符 如: [a|b] 表示a或者b将匹配;
() : 表示元字符 如:在电子邮件中查找所有以From:或者Subject:或者Date:"开头"的行,我们比较下面的两个表达式:
表达式1:"^From|Subject|Data: "
表达式2:"^(From|Subject|Data): "
哪一个是我们想要的?
很明显,表达式1的结果不是我们想要的结果,它匹配的将是:From或者Subjec或者Data: ,表达式2使用圆括符,就能满足我们的 需要。
单词边界
/b : 表示单词边界符,使用单词边界符可以定位匹配的位置必须出现在一个单词的开始或者结尾部分,而不是在单词的中间。例如:"/bis/b"表达式在字符串"This is a cat."中将匹配单词"is"而不会匹配单词"This"中的"is"。
/B : 表示定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,
即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。
字符串边界符号
除了上述的位置符号,如果我们要匹配的是整个字符串(含多个单词)那么我们可以使用下面的两个符号:
/A : 表示字符串的开始处;
/z : 表示字符串的结束处。
表达式:"/AThis is a cat/z"将匹配这个字符串"This is a cat"。
使用边界定位符号,这里要提到一个重要的概念,那就是单词字符,单词字符表示可以构成单词的字符,它们是[a-zA-Z0-9]中的任意一个字符。所以上面的表达式也会在句子"This is a cat."得到匹配。匹配的结果不包含句号。
重复数量符号
? : 表示符号前面的一个字符可以被重复的次数 ?:表示0次或1次 如:"Colou?r"将匹配Color和Colour
+ : 表示1次或多次
* : 表示0次或多次
{}: 表示具体次数
{n}:n是具体的数字 {n,m}:表示最少n次,最多m次;
这些符号都限定了符号前面一个字符的匹配次数。但是如果你想重复多个字符,比如一个单词,那么怎么办?我们再次使用圆括号,前面我们把圆括号作为选项的范围符号,这里是圆括的另外一种使用方法,它被表示为一个组,例如表达式:“(this)"这里的this就是一个组,那么问题就好办了,重复数量符号可以用来表示它前面一个组的重复次数。
现在回到查找重复单词的问题,假如我们要找到“the the”,根据我们迄今为止学到的知识,我们可以写出表达式:
"/bthe +the/b"
表达式的意思是匹配两个the中间有一个或多个空格隔开。
同样,我们还可以写成:
"/b(the +){2}"
但是如果要找全部可能的重复单词呢?我们目前的知识还不足以解决这个问题,下面我们引进反向引用的概念,我们已经看到圆括号可以作为组的边界,一个表达式中可以有多个被圆括号限定的组,根据它们出现的次序,这些组缺省的被分配了一个组号,第一个出现的组号为1号,依次类推。那么反向引用就是可以在之后的表达式的位置上是使用"/n"来引用这个组,这里n是被引用的组号。反向引用就像是程序中的变量一样,下面我们看具体的例子:
前面的单词重复表达式,现在我们采用反向引用可以写做:
"/b(the) +/1/b"
现在,如果我们要匹配所有的重复单词,我们就可以改写表达式为:
"/b([a-zA-Z]+) +/1/b"
如果我们要匹配的字符是正则表达式中的符号,怎么办?对,使用转义符号"/", 例如如果你要匹配一个小数点,那么你可以:"/."