Regex 正则表达式混合情况,不包括特定情况

Regex 正则表达式混合情况,不包括特定情况,regex,regex-negation,regex-lookarounds,Regex,Regex Negation,Regex Lookarounds,我需要一个能够匹配的正则表达式: a) 某个单词的所有大小写组合 b) 除了一些特定的案例组合 我必须通过数千个源代码文件搜索bash,查找拼写错误的变量 具体来说,我要搜索的单词是FrontEnd,在我们的编码风格指南中,它可以根据上下文以两种方式准确编写: FrontEnd (F and E upper) frontend (all lower) 因此,我需要“捕获”任何不符合我们编码标准的事件,如下所示: frontEnd FRONTEND fRonTenD 我已经阅读了很多关于这

我需要一个能够匹配的正则表达式:

  • a) 某个单词的所有大小写组合
  • b) 除了一些特定的案例组合
我必须通过数千个源代码文件搜索
bash
,查找拼写错误的变量

具体来说,我要搜索的单词是
FrontEnd
,在我们的编码风格指南中,它可以根据上下文以两种方式准确编写:

FrontEnd (F and E upper)
frontend (all lower)
因此,我需要“捕获”任何不符合我们编码标准的事件,如下所示:

frontEnd
FRONTEND
fRonTenD
我已经阅读了很多关于这个特定示例的regex教程,我找不到一种方式来说“匹配这个模式,但如果它是这个模式还是另一个模式,则不匹配”

我想这类似于试图匹配“000000到999999之间的任何数字,除了555555或123456之外”,我想逻辑是类似的(当然我也不想这么做:)

Thnx


补充意见:

我不能使用
grep
管道连接到
grep-v
,因为我可能会漏掉几行;例如,如果我这样做:

grep -i frontend | grep -v FrontEnd | grep -v frontend
会错过这样一行:

if( frontEnd.name == 'hello' || FrontEnd.value == 3 )

因为第二次出现会隐藏整行。因此,我正在搜索一个正则表达式,以便与能够进行所需精确匹配的
egrep
一起使用。

这确实应该是一个注释,但是有什么原因不能使用
sed
?我在想

sed 's/frontend/FrontEnd/ig' input.txt

当然,也就是说,假设您想要更正异常版本…

您将无法轻松地使用
egrep
执行此操作,因为它不支持lookaheads。使用perl可能是最容易做到这一点的

perl -ne 'print if /(?!frontend|FrontEnd)(?i)frontend/;'
要使用,只需通过管道将文本传输到
stdin

工作原理:

perl -ne 'print if /(?!frontend|FrontEnd)(?i)frontend/;'
^     ^^  ^     ^  ^ ^ ^                 ^   ^ The pattern that matches both the correct and incorrect versions.
|     ||  |     |  | | |                 | This switch turns on case insensitive matching for the rest of the regular expression (use (?-i) to turn it off) (perl specific)
|     ||  |     |  | | | The pattern that match the correct versions.
|     ||  |     |  | | Negative forward look ahead, ensures that the good stuff won't be matched
|     ||  |     |  | Begin regular expression match, returns true if match
|     ||  |     | Begin if statement, this expression uses perl's reverse if semantics (expression1 if expression2;)
|     ||  | Print content of $_, which is piped in by -n flag
|     || Evaluate perl code from command line
|     | Wrap code in while (<>) { } takes each line from stdin and puts it in $_
| Perl command, love it or hate it.
perl-ne'print if/(?!frontend | frontend)(?i)frontend/;'
^^^^^^^^^^^^^匹配正确和错误版本的模式。
|| | | | | | | | | | | | | | | | | |此开关打开正则表达式其余部分的不区分大小写匹配(使用(?-i)将其关闭)(特定于perl)
|| | | | | | |匹配正确版本的图案。
|| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |消极的前瞻
|| | | | |开始正则表达式匹配,如果匹配则返回true
|| | | | Begin if语句,此表达式使用perl的反向if语义(expression1 if expression2;)
|| | |打印$|的内容,以-n标志管道传输
|| |从命令行计算perl代码
||包装代码,而(){}从stdin中获取每一行并将其放入$_
|Perl命令,爱它还是恨它。

有一个原因:“好版本”
FrontEnd
FrontEnd
不可互换,这取决于上下文。因此,我们不能将“所有拼写错误的事件”替换为
FrontEnd
(就像
sed
那样),因为有些应该转换为
FrontEnd
,而另一些应该阅读
FrontEnd
。我们正在寻找一种在屏幕上显示这些内容的方法,以手动选择正确的替换项。我知道,但我认为“同样有效”意味着无论它是以何种方式编写的。哦,好吧,值得一试;我只是想回避这个问题,真的。也许有人可以把这个答案变成一个评论?就像一个符咒!!!!这正是我需要的。Thanx是一个全能的实体。特别是我在
find-exec
中使用了它,并将
{}
传递给perl,以便它“检测”数千个文件中的奇异点。