请向我解释为什么以下表达式不输出任何内容:
echo "<firstname.lastname@domain.com>" | egrep "<lastname@domain.com>"
但以下是:
echo "<firstname.lastname@domain.com>" | egrep "\<lastname@domain.com>"
第一个的行为符合预期,但第二个不应该输出。 “\<”在正则表达式中是否被忽略或导致一些其他特殊行为?
最佳答案
AS @hwnd 说 \<
匹配单词的开头。 ie
一个词的边界\b
必须存在于起始单词字符之前(输入中\<
之后的字符必须是单词字符),
在你的例子中,
echo "<firstname.lastname@domain.com>" | egrep "<lastname@domain.com>"
在上面的例子中,egrep 检查文字
<
姓氏字符串之前的字符。但没有,所以它什么也不打印。$ echo "<firstname.lastname@domain.com>" | egrep "\<lastname@domain.com>"
<firstname.**lastname@domain.com>**
但在这个例子中,一个词边界
\b
存在于 lastname
之前字符串,所以它打印匹配的字符。更多示例:
$ echo "namelastname@domain.com" | egrep "\<e@domain.com"
$ echo "namelastname@domain.com" | egrep "\<lastname@domain.com"
$ echo "namelastname@domain.com" | egrep "\<com"
namelastname@domain.**com**
$ echo "<firstname.lastname@domain.com>" | egrep "\<@domain.com>"
$ echo "n-ame-lastname@domain.com" | egrep "\<ame-lastname@domain.com"
n-**ame-lastname@domain.com**
关于带尖括号的正则表达式行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24622402/