【问题标题】:Regex capture all matches between each set of delimiters正则表达式捕获每组分隔符之间的所有匹配项
【发布时间】:2020-02-14 20:50:46
【问题描述】:

我需要找到存在于一组分隔符之间的字符串中的所有匹配项。

例如,如果我有字符串The #quick# brown fox #jumped# over the lazy #dog#.,我需要匹配quickjumpeddog

我应该只获得符合以下条件的匹配项: - 不包含分隔符/(例如 quick#quick#)。 - 在分隔符集之间。也就是说分隔符 1 和 2 是一个集合,分隔符 3 和 4 也是。我应该以 quick 结尾,而不是 brown fox

这是我目前使用的正则表达式:(?<=\#)(.*?)(?=\#)。它符合我的第一个标准,但不符合我的第二个标准。

这是在 regex101.com 上的: https://regex101.com/r/bD5mo0/1/

所以我的问题是,如何让正则表达式忽略匹配 between 集?也就是说第一个和第二个分隔符匹配,第二个和第三个不匹配。

我知道将第二个定界符更改为不同于第一个定界符可以解决此问题,但我正在正则表达式的字符串来自数据库,所以我宁愿不更改它们。

【问题讨论】:

  • (?<=#)[^#\s]*(?=#) 可能有效。你的正则表达式平台是什么?
  • 否则使用#([^#]*)# 并使用捕获组#1
  • @anubhava ...这是Javascript。
  • @anubhava ... 看起来可行。谢谢。将其添加到答案中,我会将其标记为已接受。

标签: regex


【解决方案1】:

如果您只想在一对#s 之间捕获字符串,那么最好将此正则表达式与捕获组一起使用:

/#([^#]*)#/

Updated RegEx Demo

您需要避免对这个正则表达式使用零宽度环视,因为我们需要匹配 #s 以及同时在 inout 中前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多