- 正则表达式是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现。javascript中还会用得到。
- 一个正则表达式是由普通字符串以及特殊字符字符(称为元字符)组成的文字模式,该模式描述在查找文字主体时,待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行比较。
- 就像通配符“*.jpg”、“%ab%”,它是对字符串进行匹配的特殊字符串。
- 正则表达式是非常复杂的,不要希望一次能掌握,理解正则表达式能做什么(字符串的匹配,字符串的提取,字符串的替换),掌握常用的正则表达式语法,以后用到再查就行。
- 找工作的亮点,后面项目中的采集器,敏感词过滤、URLRewite、Validator也会涉及到正则表达式。
- 正则表达式是对字符串进行操作的
- 理解元字符是一个必须攻克的难关
(1).:匹配除\n之外的任何一个字符。例如正则表达式“b.g”能匹配如下字符串:“big”、“bug”、“b g”,但是不匹配“buug”,"b..g"可以匹配“buug”。
(2)[]:匹配括号中的任何一个字符。例如正则表达式“b[aui]g”匹配bug、big和bag,但是不匹配beg、baug。也可以在括号中使用连字符“-”来指定字符的区间。例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式"a[0-9]c"等价于"a[0123456789]c"就可以匹配“a0c”、“a1c”,"a2c"等字符串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小的字母,“[A-Za-z0-9]”,可以匹配任何的大小写字母或者数字。
匹配11-20之间的数字,正则表达式为[12][0-9],不能写成[10-29],因为这里的10和29只是表示字符1 或0 2或9
(2)|:将这个匹配条件进行逻辑"或"运算。‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food”。注意^$。[ab]等价于a|b
(3)():将()之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。把一个字符串表示为一个整体。改变优先级,定义提取组两个作用。
限定符:限定前面的表达式出现的次数。
(4)匹配多个在它之前的子表达式,和通配符没有关系。例如正则表达式“zo*”等同于“z(o*)”能匹配“z”,"zo"以及"zoo",因此"*“意味着能够匹配任意字符串。
”z(b|c)*“可以匹配zb,zbc,zcb,zcccc,zbbbcc。”z(ab)*"能匹配zab,zabab(用括号表示优先级)。
(5)+:匹配前面的子表达式一次或多次,和*对比(0到多次)。例如正则表达式,9+匹配9,99,999等。"zo+“以及”zoo",不能匹配"z“。
(6)?:匹配前面的子表达式零次或一次。例如”do(es)?"可以匹配"do“,”does"。一般用来匹配"可选部分“。
(7){n}:匹配确定的n次。”zo{2}“-zoo。例如”e{2}“不能匹配”bed“中的”e“,但是能匹配”seed“中的两个”e“。
(8){n,}:至少匹配n次。例如”e{2,}“不能bed中的”e“,但能匹配”seeeeeed“中的所有”e“。
(9){n,m}:最少匹配n次最多匹配m次。”e{1,3}“
(10)^匹配一行的开始,例如正则表达式”^regex“能够匹配字符串“^regex我会用”的开始,但是不能匹配“我会用regex”。^另外一种意思:非[^0-9]
(11)$匹配行结束符。例如正则表达式“浮云$”,能够匹配字符串“一切都是浮云”的末尾,但是不能匹配字符串“浮云呀”。