4.2 假如要要求表达式所匹配的内容是整个字符串,而不是从字符串中找一部门,那么可以在表达式的首尾利用 "^" 和 "$",好比:"^\d+$" 要求整个字符串只有数字。
4.3 假如要求匹配的内容是一个完整的单词,而不会是单词的一部门,那么在表达式首尾利用 "\b",好比:利用 "\b(if|while|else|void|int……)\b" 来匹配措施中的要害字。
4.4 表达式不要匹配空字符串。不然会一直获得匹配乐成,而功效什么都没有匹配到。好比:筹备写一个匹配 "123"、"123."、"123.5"、".5" 这几种形式的表达式时,整数、小数点、小数数字都可以省略,可是不要将表达式写成:"\d*\.?\d*",因为假如什么都没有,这个表达式也可以匹配乐成。更好的写法是:"\d+\.?\d*|\.\d+"。
4.5 能匹配空字符串的子匹配不要轮回无限次。假如括号内的子表达式中的每一部门都可以匹配 0 次,而这个括号整体又可以匹配无限次,那么环境大概比上一条所说的更严重,匹配进程中大概死轮回。固然此刻有些正则表达式引擎已经通过步伐制止了这种环境呈现死轮回了,好比 .NET 的正则表达式,可是我们仍然应该只管制止呈现这种环境。假如我们在写表达式时碰着了死轮回,也可以从这一点入手,查找一下是否是本条所说的原因。
4.6 公道选择贪婪模式与非贪婪模式,拜见话题接头。
4.7 或 "|" 的阁下双方,对某个字符最好只有一边可以匹配,这样,不会因为 "|" 双方的表达式因为互换位置而有所差异。