QRegularExpression 将星号转义为字符

QRegularExpression escape Asterisk as Character

我正在尝试匹配如下所示的字符串:

7;7;52*8    
8;8;62*5    
9;9;55*1    
11;7;52*49    
12;8;62*64    
14;9;54*62

或者像这样:

7;7;52    
8;8;62    
9;9;55    
11;7;52    
12;8;62    
14;9;54

我正在使用以下代码。

QRegularExpression re("(^\d+;\d+;\d\d$)|(^\d+;\d+;\d\d\*\d+$)");
QRegularExpressionMatch match;

匹配第一部分有效,但第二部分似乎在星号部分中断。

以下代码适用于 notepad++ 中的正则表达式搜索

(^\d+;\d+;\d\d$)|(^\d+;\d+;\d\d\*\d+$)

是否有一些特殊的方法来转义星号字符?

看来您需要使正则表达式匹配的开始和结束。修复正则表达式的最简单方法是在模式的开头添加 (?m) 内联修饰符。

请注意,您的模式包含冗余部分,您可以使用具有单个分支的正则表达式:

 "(?m)^\d+;\d+;\d\d(?:\*\d+)?$"

详情:

  • (?m)^ - 行首
  • \d+;\d+; - 1+ 位和 ;(2 次)
  • \d\d - 两位数
  • (?:\*\d+)? - * 和 1+ 个数字的可选序列
  • $ - 一行结束。