我在Qt5.2中工作,我有一段代码,它接受一个字符串,并根据其格式输入几个if语句中的一个。搜索的格式之一是字母"RCV",后跟可变数量的数字、一个小数,然后再是一个数字。现在我正在使用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语句。我是不是对正则表达式做错了什么?
发布于 2014-07-25 21:07:02
您的表达式应该类似于评论中的@vahancho mentionet:
if(QRegExp("^[RCV\\d+\\.\\d\\|?]+$").exactMatch(value))如果您使用C++11,那么您可以使用它的原始字符串功能:
if(QRegExp(R"(^[RCV\d+\.\d\|?]+$)").exactMatch(value))发布于 2014-07-25 21:09:43
除了转义其他人在回答和评论中提到的反斜杠之外,
行中可以有多个这样的值,用"|“分隔,例如,它可以是"RCV0123456.1”这样的一个值,也可以是"RCV12345.1|RCV678.9“这样的多个值。
[RCV\d+\.\d\|?]可能没有执行您所期望的操作。也许您想要()而不是[]
/^
  [RCV\d+\.\d\|?]+ # More than one of characters from the list:
                   # R, C, V, a digit, a +, a dot, a digit, a |, a ?
 $/x/^
  (
    RCV\d+\.\d     # RCV, some digits, a dot, followed by a digit
    \|?            # Optional: a |
  )+               # Quantifier of one or more
 $/x此外,也许您可以修改正则表达式,以便可选的|要求组再次匹配**
/^
  (RCV\d+\.\d)     # RCV, some digits, a dot, followed by a digit
  (
    \|(?1)         # A |, then match subpattern 1 (Above)
  )+               # Quantifier of one or more
 $/x发布于 2014-07-25 21:24:06
检查是否只有符合添加的有效实例才需要|开始第二个实例(即使使用双引号,实现也不需要| ):
QString value = "RCV000030249.2|RCV000035360.2";    //Note: real test value from my code
if(QRegExp("^RCV\\d+\\.\\d(\\|RCV\\d+\\.\\d)*$").exactMatch(value))
    std::cout << ":D" << std::endl;
else
    std::cout << ":(" << std::endl;https://stackoverflow.com/questions/24956248
复制相似问题