regex - 正则表达式 - 查找不包含子字符串的多行字符串
问题描述
我需要找到缺少raise
关键字的某些代码块,如下所示:
这些是我正在搜索的匹配类型
except
FreeAndNil(result);
end;
虽然这些应该被忽略:
except
FreeAndNil(result);
raise;
end;
请记住,在except
和end;
关键字之间可能有任何类型或长度的文本。
我尝试了以下正则表达式:except((?!raise).)*end;
但是它不适用于多行场景。
解决方案
匹配换行符的选项可以通过使用否定前瞻断言这些行不以 except 或 end 开头来匹配 except 和 end 之间的所有行:
\bexcept\s*\r?\n(?:(?!(?:except|[\t ]+raise;)$).*\r?\n)*end;
在零件
\bexcept\s*\r?\n
匹配除,0+ 空白字符和换行符(?:
非捕获组(?!
负前瞻,断言右边的不是(?:except|[\t ]+raise;)$)
匹配一个except
或 1+ 个空格或制表符,raise;
然后是字符串的结尾。
)
关闭前瞻.*\r?\n
匹配整行,后跟换行符
)*
重复非捕获组 0+ 次end;
从字面上匹配
推荐阅读
- javascript - 在 Django 中使用 AJAX 持续检查文件是否存在
- javascript - javascript twitch api获取状态不起作用
- google-cloud-platform - 无法创建承诺
- javascript - 将带有提取数据的 PHP 变量传递给 JavaScript 变量返回 NULL 或空
- java - 将 $JAVA_HOME 设置为 opc,不能作为 oracle 访问
- ruby-on-rails - NameError: 未初始化的常量 Api::V1::Item::ItemsController::Item
- python - 如何在 Keras 中连接两个 LSTM 模型
- perl - 如何从if条件内的变量中提取值
- html - 为什么引导下拉导航按钮可以在所有屏幕尺寸上工作,除了一个?
- angular - 在 Kendo-ui 中使用多选进行下拉选择