我想知道/有一个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 :(得分:0)
我建议将所有多行注释作为正则表达式中的第一个替代,并匹配和捕获数字序列(即使用围绕[0-9]+
模式的捕获组):
QRegExp("/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/|\\b([0-9]+)\\b")
现在,您需要的数字位于cap(1)
。
请参阅regex demo
看起来你需要在[0-9]+
模式周围使用单词边界来匹配独立,"整个单词"数字块。
模式详情:
/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/
- 已展开的PCRE /\*.*?\*/
正则表达式匹配多行C评论,请参阅Mastering Regular Expressions
book, Unrolling-The-Loop Components for C Comments section |
- 或\\b
- 领先的单词边界([0-9]+)
- 第1组捕获一个或多个数字\\b
- 尾随字边界答案 1 :(得分:0)
除非正则表达式引擎支持负向lookbehind的完整正则表达式(根据http://www.regular-expressions.info/ - 只有.NET和JGsoft引擎这样做),否则你需要单独找到注释部分才能可靠地执行此操作。
第一遍删除或跳过字符串中的评论部分,然后根据需要进行数字匹配(例如现在)。
要查找评论,您可以使用以下模式:
/\*((?!\*/).)*\*/
如果您需要处理嵌套的评论部分,如果需要,您需要删除评论并重复,直到找不到评论部分。
另一方面,如果不需要嵌套注释,则可以将注释和数字匹配正则表达式合并为一个,然后检查匹配的字符串(或捕获)以查明它是注释还是数字匹配。