Regex 吉特·格雷普<;包含换行符的正则表达式>;

Regex 吉特·格雷普<;包含换行符的正则表达式>;,regex,git,git-grep,Regex,Git,Git Grep,我正试图在Windows机器上使用git bash在一个项目中实现所有功能 尝试了以下不起作用的命令: $ git grep "[+-*\|%]\ *\n" fatal: command line, '[+-*\|%]\ *\n': Invalid range end $ git grep "[+\-*\|%]\ *\n" fatal: command line, '[+\-*\|%]\ *\n': Invalid range end 好的,我不知道如何在字符集中包含“-”,但在删除它之后,

我正试图在Windows机器上使用git bash在一个项目中实现所有功能

尝试了以下不起作用的命令:

$ git grep "[+-*\|%]\ *\n"
fatal: command line, '[+-*\|%]\ *\n': Invalid range end

$ git grep "[+\-*\|%]\ *\n"
fatal: command line, '[+\-*\|%]\ *\n': Invalid range end
好的,我不知道如何在字符集中包含“-”,但在删除它之后,
\n
仍会与字符
n
字面上匹配:

$ git grep "[+*%] *\n"
somefile.py:            self[:] = '|' + name + '='
                                      ^^^
将反斜杠转义一次(
\\n
)无效,转义两次(
\\\n
)将导致正则表达式匹配
\n
(字面意思)

到这里去grep的正确方法是什么

我不知道如何在字符集中包含“-”

如果要在字符集中包含短划线字符(
-
),则无需对其进行转义。如果你把它放在集合中的第一个或最后一个字符,它就没有特别的意义

此外,不需要在字符范围内转义
|
。除了
^
(当它是范围内的第一个字符时)、
-
(当它不是范围内的第一个或最后一个字符时)、
]
\
(当它用于转义
]
时),所有其他字符在字符范围内都有其字面意义(即没有特殊意义)

也不需要在regexp中放入
\n
。默认情况下,grepping工具会尝试一次将regexp与一行匹配,而
git grep
也会这样做。如果只需要在行尾匹配regexp,则将
$
(行尾锚点)作为regexp的最后一个字符

您的regexp应该是
[-+*|%]*$

总的来说,完整的命令行是:

git grep '[-+*|%] *$'

谢谢我必须使用
grep'[-+*|%]\s*$”
来解释windows行的结尾。事实证明,我也能从中找到答案。另见: