在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++字符串进行转义,然后,其本身的转义是对于正则表达式语法规则而言的转义。因此需要两层转义,才能匹配成功。

在Qt环境中使用正则表达式时,遇到元字符如w和s需双层转义。在C/C++字符串中,是特殊字符,需要转义成\,而正则表达式中s等也需要转义,因此在Qt中应写为\w和\s。模式串1的错误在于只有一层转义,模式串2的双层转义才使得匹配成功。
1608

被折叠的 条评论
为什么被折叠?



