正则表达式:接受但不捕获模式

时间:2019-01-06 19:12:46

标签: regex

我想要一个与

匹配的模式
ab
a-b
a b
a  b
a-b

其中ab可以是任何模式,但为简单起见,它们被简化为ab

在所有这些情况下,我都想返回"ab"。我可以通过正则表达式来完成全部工作吗?还是必须接收匹配的表达式以及分隔符并通过替换所述字符等在代码中对其进行处理?

1 个答案:

答案 0 :(得分:1)

可能会误解了您的意思,对此我感到抱歉。
您可以在regexp中用引号()进行分组,
例如,对于您的情况:

(a)(-|\s+)?(b)

然后使用\1\3来引用ab。因此\1\3的意思是ab
请注意,某些工具可能需要改用\\1\\3
查看您所用语言的文档,以查找确切的正则表达式规则。

我不确定您将在哪里使用它,这里我以sed为例:

$ echo -e "ab\na-b\na b\na  b\n"|sed -E 's/^(a)(-| +)?(b)$/\1\3/'
ab
ab
ab
ab

请注意,此处使用的正则表达式为^(a)(-| +)?(b)$^$用于匹配字符串/行的开头和结尾。

换句话说,这些行可以由该正则表达式accepted-在某些情况下,它已经被验证。
但是,如果您想return ab,那不是简单的匹配,而是需要进行替换/重组的附加步骤。