在Qt中做正则表达式时,遇到一个很坑爹的问题,还是经验不足导致。
在正则表达式中,有很多需要元字符,是需要使用普通字符加转义符号搭配使用的。比如\w
,\s
。对于这类字符,在Qt中使用时,对\
再次进行转义,某则模式串是无法识别为\w
,\s
的。即在Qt中,应该是用"\\w"
,"\\s"
来匹配元字符中加了转义符号的字符。对于在元字符集中不需要加转义的字符,在需要将其匹配为普通字符的时候,只需要加一层转义,如"\["
。
原始字符串:
"\r\r\norangepi3-lts login: "
模式串1:
".+\s+login:\s*$"
此时,使用模式串1去匹配发现并不能匹配成功。但是,使用正则表达式的测试工具测试,这个模式串是能匹配成功的。
模式串2:
".+\\s+login:\\s*$"
使用模式串2匹配是能匹配成功的。 原因就在于,模式串1在正则测试工具中能匹配成功,是因为它本身是正确的。但是由于在C/C++中,对于\
符号,是需要转义的,这个是字符串层面的转义,由于模式串是C/C++字符串,所以,\s
元字符是需要被C/C++字符串进行转义,然后,其本身的转义是对于正则表达式语法规则而言的转义。因此需要两层转义,才能匹配成功。