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

Non greedy condition to ignore Comments in a line using QRegExp

本文关键字:贪婪 条件 注释 QRegExp 使用      更新时间:2023-10-16

我想知道/有一个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演示

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

图案详细信息

  • /\*[^*]*\*+(?:[^/*][^*]*\*+)*/-一个展开的PCRE /*.*?*/正则表达式,匹配多行C注释,请参阅Mastering Regular Expressions一书,展开C注释的循环组件部分
  • |-或
  • \b——一个前导词边界
  • ([0-9]+)-第1组捕获一个或多个数字
  • \b-尾随字边界

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

第一步删除或跳过字符串中的注释部分,然后根据自己的喜好进行数字匹配(例如,现在)。

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

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

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

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