我知道这个问题没有多大意义,因为我可以只使用扩展正则表达式(ERE)。但是,让我们说一分钟,实现交替是当前的唯一选择。我将如何仅使用BRE实施它?还是我必须找到解决方法?
假设我们有以下字符串:
AAAAAA======-----======AAAAAAAAA
我现在的目标是仅将AAAAA,======,-----,======和AAAAAAAAA分别与基本正则表达式匹配。使用ERE可以很快完成,但是我想知道如何仅通过BRE来实现它。到目前为止,如果没有一些匹配的字符串相互重叠,我就找不到合适的方法(例如正则表达式匹配“ AAAAA ==”,这是不应该发生的)。
简单:它是没有可能的BRE有交替
POSIX BRE不支持任何其他功能。甚至不支持交替。
您的基本目标:
我现在的目标是将...分别与基本正则表达式匹配。
使用BRE是可能的:
$ str='AAAAAA======-----======AAAAAAAAA'
$ echo "$str" | grep -Eo '(.)\1*'
AAAAAA
======
-----
======
AAAAAAAAA
甚至在BRE grep中有几种模式:
$ echo "$str" | grep -o -e 'AA*' -e '--*' -e '==*'
AAAAAA
======
-----
======
AAAAAAAAA
或将您的解决方案限制为GNU grep(\|
即使在BRE语法中也可以作为替代;这不是有效的POSIX功能):
$ echo "$str" | grep -o '\(AA*\)\|\(==*\)\|\(--*\)'
但是您的次要目标是:
是否还可以将它们分别放在单独的捕获组中?
只需要一个正则表达式,并且由于无法在BRE中进行替换,因此这是不可能的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句