哪里支持环视正则表达式,哪里不支持?

Where is lookaround regex supported and where isn't it?

为了提高我的正则表达式技能,我想了解前瞻和后视表达式。在我的 Archlinux 系统上,我尝试了以下操作:

a=ab;if [[ $a =~ [a-z](?=b) ]]; then echo "Y";else echo "N";fi

据我所知,应该匹配并因此回显 "Y",但不匹配。

echo ab |sed 's/[a-z](?=b)/x/'

...似乎也不匹配。 grep 似乎也没有环顾四周,但 pcregrep 确实如此。我还尝试了几次引用 and/or 转义表达式的尝试,但都无济于事。

我现在有点困惑。有人可以澄清一下 lookaround,从教程中提到的次数来看,that 似乎不是异国情调,实际上可以在哪里使用?或者我只是搞砸了逃避我的表情?

您应该区分基本扩展正则表达式。

在基本正则表达式中,元字符 ?+{|() 失去它们的特殊意义;他们需要转义才能获得 "regex" 的含义。

另一方面,在 扩展的 正则表达式中,这些字符具有 "regex" 的含义。

如果你grep --help,你会得到:

-E, --extended-regexp PATTERN is an extended regular expression (ERE)

请注意 grep 支持环视,它在 pcregrep.

中受支持

bash 或 sed 中可用的基本或扩展 posix 正则表达式不支持环视断言。

GNU grep 是一个很好的测试工具,它支持-P perl 兼容 正则表达式的选项。像这样:

grep --color=auto -P '[a-z](?=b)' <<< 'ab'

甚至更好的资源是在线正则表达式测试工具,例如 https://regex101.com/