我有一个由软件生成的大量代码。每条指令都有一个标识号,我只需要修改某些数字:
grr.add(new GenericRuleResult(RULEX_RULES.get(String.valueOf(11)), new Result(0,Boolean.FALSE,"ROSSO")));
grr.add(new GenericRuleResult(RULEX_RULES.get(String.valueOf(12)), new Result(0,Boolean.FALSE,"£££")));
etc...
现在,我使用SublimeText3使用此正则表达式快速更改所有错误的行:
Of\((11|14|19|20|21|27|28|31)\)\), new Result\(
上面的这个正则表达式允许我把#ROSSO" (红色)包含这些数字的每一行。现在我必须把" VERDE" (绿色)在剩余的行中。我的想法是在正则表达式中添加?!
来查找 NOT CONTAINING 这些数字的所有行。
从网站Regex101我得到了正则表达式的描述:
Of matches the characters Of literally (case sensitive)
\( matches the character ( literally (case sensitive)
Negative Lookahead (?!11|14|19|20|21|27|28|31)
Assert that the Regex below does not match
1st Alternative 11
etc...
那么为什么我找不到包含12,13,14等的行?
编辑:实际正则表达式:Of\((?!11|14|19|20|21|27|28|31)\)\), new Result\(
答案 0 :(得分:2)
你的问题是你正在假设一个负向的前方改变光标位置,它没有。
也就是说,(?!xy)
形式的否定前瞻仅仅验证 next 两个字符不是xy
。然后它不会从文本中吞下两个字符。顾名思义,它只是向前看,而不是前进!
因此,如果您希望在该断言之外进一步匹配,您必须:
xy
; 所以尝试类似:
Of\((?!11|14|19|20|21|27|28|31)..\)\), new Result\(