【发布时间】:2021-10-25 08:54:47
【问题描述】:
我无法在git grep 和/或git log -L 中使用基于正则表达式的正则表达式。我正在使用git log -L <funcname>:<filename> 使用正则表达式<funcname> 的功能。测试文件如下:
public class FakeFile {
public static void main(String[] args) {
System.out.println('Hello World');
}
public static void method2() {
System.out.println('method2');
}
public static void method2(float i) {
System.out.println(String.format('method2 %f', i));
}
public static void method3() {
System.out.println('method3');
}
}
在this answer 之后,我使用^(?=.*float i).*method2.*$ 来匹配使用浮点参数定义method2 的行。它适用于rubular,但我无法使用grep 或git log -L 在我的shell 中运行它。我尝试用' 和\ 字符包围它,但没有成功。
有什么想法吗?
编辑:添加缺少的.* 是正则表达式。
【问题讨论】:
-
在 rubular 演示中,您使用
^(?=.*float i).*method2.*$,这与^(?=float i).*method2.*$不同,如果支持,您是否尝试过grep -oP? -
好吧,你不能指望在方法名之前声明参数,所以你仍然不需要环顾四周,
^.*method2.*float i.*就可以了。 -
@WiktorStribiżew 我需要一种以任何顺序匹配参数的方法,这就是我考虑积极前瞻的原因。你是对的,我在消息中打错了字,我正在将其更改为在前瞻中包含
.*。 -
@Thefourthbird 我不能依赖 grep 参数,因为我需要正则表达式才能使用
git log -L命令,但感谢您的评论! -
无论如何,POSIX 正则表达式不支持环视。你不能在这里使用它们。如果您可以使用
-P启用PCRE 引擎,那么您只能使用lookarounds。