欢迎各位兄弟 发布技术文章
这里的技术是共享的
Linux中的扩展正则表达式(Extended Regular Expression,ERE)和普通正则表达式(Basic Regular Expression,BRE)主要在语法和功能上有一些区别:
普通正则表达式(BRE):
BRE是基础的正则表达式形式,提供了基本的模式匹配能力。
在BRE中,某些元字符(如*
, +
, ?
, {}
)需要进行转义才能作为元字符使用,例如 \*
、\+
、\?
、\{n,m\}
。 元字符含义 /node-admin/20148
BRE中,重复次数表示法较为简单,例如`.*
表示前面的字符可以重复任意次(包括0次)。
扩展正则表达式(ERE):
ERE提供了更加强大和灵活的模式匹配能力,包含更多的元字符和语法结构。
在ERE中,元字符可以直接使用,不需要转义,例如*
, +
, ?
, {}
就是元字符。
ERE支持更复杂的重复次数表示法:
{n}
表示前一个字符必须连续出现n次。
{n,}
表示前一个字符至少连续出现n次。
{n,m}
表示前一个字符至少连续出现n次,最多连续出现m次。
ERE还支持其他一些BRE不提供的元字符和构造,例如:
|
表示“或”操作,用于匹配多个模式中的任何一个。
()
用于分组和捕获子表达式。
总的来说,ERE提供了更丰富和强大的正则表达式语法,使得模式匹配更加灵活和精确。而在BRE中,由于语法限制较多,有时需要更复杂的写法来实现同样的匹配效果。在Linux中,grep
命令默认使用BRE,而egrep
或grep -E
则使用ERE进行匹配。
在 Linux 中,正则表达式主要分为两种:普通正则表达式(Basic Regular Expression, BRE)和扩展正则表达式(Extended Regular Expression, ERE)。它们的主要区别在于某些元字符的处理方式以及支持的功能。以下是主要区别和示例:
某些元字符如 ?
, +
, {}
, |
, (
, )
等是以字面值(literal)解释的,除非前面加上反斜杠 \
进行转义。
这些元字符可以直接使用,无需转义。
普通正则表达式(BRE):
bash
echo "abc" | grep "ab\?c"
扩展正则表达式(ERE):
bash
echo "abc" | grep -E "ab?c"
普通正则表达式(BRE):
bash
echo "aaaa" | grep "a\{1,\}"
扩展正则表达式(ERE):
bash
echo "aaaa" | grep -E "a{1,}"
普通正则表达式(BRE):
bash
echo "cat dog" | grep "cat\|dog"
扩展正则表达式(ERE):
bash
echo "cat dog" | grep -E "cat|dog"
普通正则表达式(BRE):
bash
echo "abc" | grep "$ab$c"
扩展正则表达式(ERE):
bash
echo "abc" | grep -E "(ab)c"
在普通正则表达式(BRE)中,需要使用反斜杠来转义某些元字符,而在扩展正则表达式(ERE)中,这些元字符可以直接使用。
使用 grep
时可以通过 -E
选项来启用扩展正则表达式,以便于使用更简洁的语法进行匹配。