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" 正则表达式,这与此运算符的工作方式相反。
基本正则表达式和扩展正则表达式的区别解释如下:
我不明白如何在正则表达式中转义。 我知道如果我在一个字符前放一个 '\' 它应该从字面上匹配那个字符。
但是如果我输入
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" 正则表达式,这与此运算符的工作方式相反。
基本正则表达式和扩展正则表达式的区别解释如下: