regalar expression - 如何转义

Regalar expression - How to escape

我不明白如何在正则表达式中转义。 我知道如果我在一个字符前放一个 '\' 它应该从字面上匹配那个字符。

但是如果我输入

echo "hello 8 9 2013" | grep -e "^hello|hello$"

我一无所获。 而如果我输入

echo "ciao 8 9 2013" | grep -e "^ciao\|ciao$"

它工作正常。

有人可以向我解释这种行为的原因吗?

在第二个代码中,我希望 grep 查找“|”,而在第一个代码中,我希望 grep 将其解释为 "or"。但是我却恰恰相反。

grep 中的默认正则表达式引擎是 基本正则表达式 (BRE),需要 | 进行转义。

您可以使用 -E 扩展正则表达式 覆盖此行为,如下所示:

echo "hello 8 9 2013" | grep -E "^hello|hello$"

根据man grep

-E, --extended-regexp
  Interpret pattern as an extended regular expression (i.e. force grep to behave as egrep).

默认情况下,grep实现"basic"正则表达式,其中|是普通字符,而\|是交替运算符。如果您使用 grep -E(或旧名称 egrep),它会实现 "extended" 正则表达式,这与此运算符的工作方式相反。

基本正则表达式和扩展正则表达式的区别解释如下:

http://www.regular-expressions.info/posix.html