正则表达式:如何匹配“ab”、“ac”和“a”

正则表达式:如何匹配“ab”、“ac”和“a”

现在,我有三个字符串需要通过单个 re 进行匹配——'a'、'ab'、'ac'。我猜想一个正确的 re 应该是 'a[bc]?',但似乎不正确。哪个是正确的?

我在 grep 命令中尝试了它。似乎 grep 的正则表达式中没有 '?'。那么如何在 grep 中进行这种匹配?

感谢@anubhava,我现在可以通过以下方式匹配所有这三个字符串:

grep -E 'a[bc]?' <file>

但是,此表达式也与“ad”匹配。

事实上,我想匹配所有这些情况:'a','abc','ab','ac',但不想匹配'ad'或'ae'

答案1

如果您想在 grep 命令中使用上述内容,请使用-E带有单词边界的扩展正则表达式支持开关:

grep -E "\ba[bc]?\b" file

或者

grep -E "\<a[bc]?\>" file

答案2

要在基本模式下使用此表达式,您需要转义问号:

grep 'a[bc]\?' file

更新

为了解决您的最新问题,我建议使用 P(erl) 模式:

grep -P 'a(?![de])|a[bc]|abc'

这些是替代方案:

  1. 如果后面没有“d”或“e”,则匹配“a”(使用负向前瞻)

  2. 匹配“ab”或“ac”

  3. 匹配“abc”

答案3

如果希望字符串从头到尾匹配正则表达式,则需要在正则表达式中包含开始^和结束$标记

^a[bc]?$

如果标记不是正则表达式的一部分,123ab456则将匹配正则表达式。

相关内容