使用 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)
.
中
看起来您还需要在 [0-9]+
模式周围使用单词边界来匹配独立的 "whole-word" 数字块。
图案详情:
/\*[^*]*\*+(?:[^/*][^*]*\*+)*/
- 展开的 PCRE /\*.*?\*/
匹配多行 C 注释的正则表达式,参见 Mastering Regular Expressions
book, Unrolling-The-Loop Components for C Comments section
|
- 或
\b
- 前导词边界
([0-9]+)
- 第 1 组捕获一位或多位数字
\b
- 尾随单词边界
您将需要单独找到注释部分才能可靠地执行此操作,除非正则表达式引擎支持完整的负向后视正则表达式(根据 http://www.regular-expressions.info/,只有 .NET 和 JGsoft 引擎支持)。
第一遍删除或跳过字符串中的注释部分,然后根据需要进行数字匹配(例如像现在一样)。
要查找评论,您可以使用此模式:
/\*((?!\*/).)*\*/
如果你需要处理嵌套的评论区,如果需要,你需要删除评论并重复直到找不到更多的评论区。
另一方面,如果嵌套注释不是必需的,您可以将注释和数字匹配正则表达式合并为一个,然后检查匹配的字符串(或捕获)以确定它是注释还是数字匹配。
我想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)
.
看起来您还需要在 [0-9]+
模式周围使用单词边界来匹配独立的 "whole-word" 数字块。
图案详情:
/\*[^*]*\*+(?:[^/*][^*]*\*+)*/
- 展开的 PCRE/\*.*?\*/
匹配多行 C 注释的正则表达式,参见Mastering Regular Expressions
book, Unrolling-The-Loop Components for C Comments section|
- 或\b
- 前导词边界([0-9]+)
- 第 1 组捕获一位或多位数字\b
- 尾随单词边界
您将需要单独找到注释部分才能可靠地执行此操作,除非正则表达式引擎支持完整的负向后视正则表达式(根据 http://www.regular-expressions.info/,只有 .NET 和 JGsoft 引擎支持)。
第一遍删除或跳过字符串中的注释部分,然后根据需要进行数字匹配(例如像现在一样)。
要查找评论,您可以使用此模式:
/\*((?!\*/).)*\*/
如果你需要处理嵌套的评论区,如果需要,你需要删除评论并重复直到找不到更多的评论区。
另一方面,如果嵌套注释不是必需的,您可以将注释和数字匹配正则表达式合并为一个,然后检查匹配的字符串(或捕获)以确定它是注释还是数字匹配。