【发布时间】:2014-07-25 21:24:06
【问题描述】:
我在 Qt 5.2 中工作,我有一段代码接受一个字符串并根据其格式输入几个 if 语句之一。搜索的格式之一是字母“RCV”,后跟可变数量的数字、一个小数,然后是一个数字。一行中可以有多个这些值,用“|”分隔,例如它可以是一个值,如“RCV0123456.1”或多个值,如“RCV12345.1|RCV678.9”。现在我正在使用 QRegExp 类来查找这个,如下所示:
QString value = "RCV000030249.2|RCV000035360.2"; //Note: real test value from my code
if(QRegExp("^[RCV\d+\.\d\|?]+$").exactMatch(value))
std::cout << ":D" << std::endl;
else
std::cout << ":(" << std::endl;
我希望它使用 if 语句,但它一直进入 else 语句。我的正则表达式有什么问题吗?
【问题讨论】:
-
我认为您必须转义正则表达式字符串中的反斜杠,例如
"^[RCV\\d+\\.\\d\\|?]+$"。奇怪的是它甚至可以编译。 -
@vahancho 感谢您的提示,我不需要像那样进行更改,但它让我走上了正轨。在'.'之前我只需要一个反斜杠。和'|'因为我希望它识别字符本身而不是它们通常表示的元字符,但是由于我在寻找'\d',所以我需要'\\d',所以它不会只匹配字母'd'。至于编译注释,我认为它编译是有道理的,因为语法仍然有效,它只是寻找错误的东西。再次感谢您的帮助! :)
-
@vahancho:编译时带有警告(g++)。
-
@Unihedron 感谢您的评论,[] 实际上确实有效,但这是一个不同的问题,vahancho 的评论和我的回复涵盖了解决方案
-
转义反斜杠会发现你第一次出现。如果你只需要检查是否至少找到了一个你的罚款,为了找到所有的出现,你必须通过最后一个匹配的偏移量来循环字符串。