regex - 在正则表达式/日食搜索中查找不包含双斜杠的行
问题描述
在 Eclipse 中仅搜索包含 'foo' 的未注释行时,我也会收到注释行。
找不到:
// foo
// foobar
// foo
// foobar
// // foobar
bar // foobar
被发现:
foo
/ foobar
bar foo
foobar
我尝试了负前瞻/后视和转义/未转义的正斜杠,以下都不适用于全局搜索,即它们都返回 // 行
^.*(?!//).*foo.*$
^.*(?<!\/\/).*foo.*$
是否有一个有效的正则表达式来匹配这些行?
解决方案
您可以使用
^([^/\n]*(?:/(?!/)[^/\n]*)*?foo.*)
并替换为//\1
. 请参阅正则表达式演示。
这与模式(演示)基本相同
^((?:(?!//).)*?foo.*)
但为了获得更好的性能而展开。
看看这些模式是如何工作的:
^((?:(?!//).)*?foo.*)
将字符串的开头与 匹配^
,然后除换行符 char (.
) 以外的任何不以//
字符序列 ((?!//)
) 开头的字符重复 0 次或多次,但尽可能少地重复(由于*?
),然后匹配foo
并.*
匹配字符串的其余部分^([^/\n]*(?:/(?!/)[^/\n]*)*?foo.*)
还匹配字符串的开头,然后匹配除和换行符以外的[^/\n]*
0 个或多个字符(用, 保持在同一行),然后匹配 0 个或多个不跟随的序列的重复(参见),然后是 0或除和换行符以外的更多字符,然后和行的其余部分与./
[^/\n]*
(?:/(?!/)[^/\n]*)*?
/
/
/(?!/)
/
foo
foo.*
推荐阅读
- node.js - 处理嵌套的 Promise
- android - ViewModel 观察每个返回片段
- reactjs - 如何在不使用 undefined 和 empty ("") 的情况下传递可选参数同时省略一些其他可选参数
- javascript - Vue JS NPM 模块导入组件
- vue.js - 验证表单输入 bootstrap4
- node.js - node.js Cast to ObjectId 在邮递员上出现错误,但我没有使用任何变量,我只是在测试路线
- javascript - React Native 中的“双重获取”调用问题
- python - 如何解决 Django 中的页面未找到错误?
- json - yang模型ietf-routing的使用
- c# - 应用程序停止 intent.PutExtra