Qt 正则表达式匹配失败的一个原因

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

猜你喜欢

转载自blog.csdn.net/duapple/article/details/129777377