学习正则表达式 ,很多人都是云里雾里的,把所有东西学完了,但是还是不会用,这是为什么那?
在正则中:
①要理解单词和字符串的概念
我们的匹配是以单词开始的
\w* 我们都知道*具有贪婪性
name 用\w*匹配的结果? name
但是我们也许不知道的是\w*其实匹配到的结果集是三个串数组
str[0]=“name” str[1]="" str[2]=""
②要理解返回值的概念
当我们知道 \w*匹配到的是一个数组的情况下
那么name Regex匹配结果哪?
str[0]=“name” str[1]="" str[2]=“Regex” str[3]="" str[4]=""
③ 正确理解 ^ $ 的用途
我们用 ^\w*$来匹配 name Regex 结果 为空
这个时候我们还能说^ 定位字符串开头 $ 定位字符串结尾的吗?
但是如果我们换成name 用^\w*$ 的时候结果为
str[0]=“name” str[1]="" str[2]=""
我们^\w* 来匹配name Regex 的结果 name
我们 \w*$来匹配name Regex 的结果 Regex
准确的说 ^ 匹配的是字符串开头部分的单词
$ 匹配的是字符串结尾部分的单词
④ 一定要慎用点 .
我用.*来匹配name Regex 的结果name Regex
如果我只想用.*匹配name Reagx中的name部分哪 $.*可以吗? 不可以
.所得代表的是转移字符 \w 字符 \d数字 \s 空格 所以一定要慎用
那不用点应该怎么匹配哪?
我们\w*\s\w*来匹配name Regex 的结果name Regex
要比.可控制性强很多
⑤* ? 的使用原则
<(h|H)\d.?</(h|H)\d>
能够完美匹配 所哟 H1-H6标签
<h1 dd=“dsese” de=dd>dwdf</h1>
<h1></h1>
我们看到这里用到了.? 这个说明<h1 后面可以是任意字符 尽可能少 去匹配 遇到?后面,就让?后面去匹配而直接使用.* 也能够
<h1 dd=“dsese” de=dd>dwdf</h1>
<h1></h1>
单是他是作为一组字符串去使用 也就说后面的</(h|H)\d>表达式失去了作用.
理解了这些概念 我想你一定能写出一个符合规定的正则表达式
理解正则就要正确理解意思6个元字符的使用,一定会让你步入正则高手的行列