使用 QRegExp 忽略一行中的注释的非贪婪条件

Non greedy condition to ignore Comments in a line using QRegExp

我想know/have一个qregexp,它可以从一行中提取所有整数,但如果数字位于评论部分则停止提取

For Example

    { 20,100,0X0},/*this line contains 2 integers*/

我的代码

QRegExp("(\d+)\}"); 

完成工作但效率不高,因为评论可能会出现在花括号内

For Example, my Expression WILL NOT WORK IF
{ 20,100/*new comment 2*/,0X0}

那么如何使用 QRegExp 忽略评论部分中的字符串并继续搜索我的表达式

我建议匹配所有多行注释作为正则表达式中的第一个选项,并匹配和捕获数字序列(即使用 [0-9]+ 模式周围的捕获组):

QRegExp("/\*[^*]*\*+(?:[^/*][^*]*\*+)*/|\b([0-9]+)\b")

现在,您需要的数字将在 cap(1).

regex demo

看起来您还需要在 [0-9]+ 模式周围使用单词边界来匹配独立的 "whole-word" 数字块。

图案详情:

您将需要单独找到注释部分才能可靠地执行此操作,除非正则表达式引擎支持完整的负向后视正则表达式(根据 http://www.regular-expressions.info/,只有 .NET 和 JGsoft 引擎支持)。

第一遍删除或跳过字符串中的注释部分,然后根据需要进行数字匹配(例如像现在一样)。

要查找评论,您可以使用此模式:

/\*((?!\*/).)*\*/

如果你需要处理嵌套的评论区,如果需要,你需要删除评论并重复直到找不到更多的评论区。

另一方面,如果嵌套注释不是必需的,您可以将注释和数字匹配正则表达式合并为一个,然后检查匹配的字符串(或捕获)以确定它是注释还是数字匹配。