代码之家  ›  专栏  ›  技术社区  ›  Maths noob

regex:接受但不捕获模式

  •  -1
  • Maths noob  · 技术社区  · 6 年前

    我想要一个匹配的图案

    ab
    a-b
    a b
    a  b
    a-b
    

    哪里 a b 可以是任何模式,但可以简化为 为简单起见。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tyl    6 年前

    可能误解了你的意思,如果是的话,我很抱歉。
    你可以把事情分组 regexp 带引号 () ,
    例如,对于您的案例:

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

    以后使用 \1 \3 参考 a b . 所以 \1\3 将意味着 ab .
    注:某些工具可能需要使用 \\1\\3 相反。
    查看您语言的文档以了解准确的regexp规则。

    我不知道你在哪儿用这个,我在这儿用 sed 举个例子:

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

    注意这里使用的regex是 ^(a)(-| +)?(b)$ , the ^ $ 与字符串/行的开头和结尾匹配。

    换句话说,这些行可以是 accepted 通过那个regexp——在某些情况下,它已经被验证了。
    但是如果你想的话 return 抗体 ,这不是简单的匹配,而是需要替换/重新组织的附加步骤。