正则表达式-实例分析
有些人就喜欢反人类。
比如,很多时候我们会具体需求写出符合要求的正则表达式。但是有些人偏偏不这么干,他会问你这个正则表达式是干嘛的,并称之为综合运用能力。
这就好比非要人根据拉的屎去推测吃了什么。
或许你想到了,他,就是面试官。
没办法,人在矮檐下,不低头就碰头。忍忍吧!
先撩出来一个正则表达式:
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/
干嘛的呢,分析下:
1、首先可以判断最外层的两个 / 是定界符,相当于 sed 的前一部分
2、三组小括号,构成三个小组,配合 arr[i] ,形成arr[1], arr[2], ...
3、\w \d 分别匹配 字母、数字
4、(\w+):\/\/ 匹配 若干个字符,并且分配到 \1 部分
5、([^/:]+) 匹配 非/、非: 部分,: 前所有东西
6、(:\d*)? 匹配 若干个数字的组合,括号后面的 ? 是 匹配前面表达式 0或 1 次。
7、([^# ]*) 匹配 非#、非 (空格)
结合实例再看看
http://www.runoob.com:80/html/html-tutorial.html
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/
1、首先可以判断最外层的两个 / 是定界符,相当于 sed 的前一部分
2、三组小括号,构成三个小组,配合 arr[i] ,形成arr[1], arr[2], ...
3、\w \d 分别匹配 字母、数字
4、(\w+):\/\/ 匹配 http:// 部分,:// 原样匹配, http则由 (\w+) 匹配,并且把 http 分配到 \1 部分
5、([^/:]+) 匹配 www.runoob.com 部分,为什么呢,因为指定的是 非/、非: ,所以,匹配了 / 和 : 之间的所有东西
6、(:\d*)? 匹配 :80 部分, 这部分原本很好理解, : 开头,若干个数字的组合,可问题是在括号后面的 ? ,到底是个什么鬼 ,最终的解释只能是 匹配前面表达式 0或 1 次。
7、([^# ]*) 匹配 /html/html-tutorial.html 部分,没啥说的, 非#、非 (空格)进行匹配