首页 > 解决方案 > 正则表达式:接受但不捕获模式

问题描述

我想要一个匹配的模式

ab
a-b
a b
a  b
a-b

whereab可以是任何模式,但为了简单起见,简化为ab

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

标签: regex

解决方案


可能误解了你的意思,如果是这样,我很抱歉。您可以用引号
将事物分组, 例如,您的案例:regexp()

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

稍后使用\1and\3来指代aand b。所以\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)$, ^and $are 来匹配字符串/行的开头和结尾。

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


推荐阅读