初学者常遇到的五个正则表达式错误及其解决方法。
第一,忘记转义点(.)的错误。点在正则表达式中表示「任意一个字符」,所以要查找真正的句点,必须写成 \. 。例如查找文件扩展名 .txt 时,如果不写成 \.txt,那么 xtxt 之类的也会被匹配到。
第二,因贪婪匹配而抓取过多的错误。<.*> 会从第一个 < 一直吞到最后一个 > 。要逐个抓取标签,就用懒惰的 <.*?> 或否定字符类 <[^>]*> 。
第三,漏掉锚点的错误。要校验整个字符串是否符合格式,必须用 ^ 和 $ 固定两端。没有锚点的话,即使字符串只有一部分符合也会通过,密码、用户名校验就会被绕过。
第四,在方括号内过度转义特殊字符。在字符类 [] 内,大多数元字符都被当作普通字符处理,所以 [.+*] 表示这三个符号本身。不过 ] ^ - \ 要注意其位置。
第五,忘记标志的错误。要查找所有匹配需要 g,要忽略大小写需要 i,要在多行中让 ^·$ 应用于每一行需要 m。如果结果只出现一个,请先检查 g 标志。