如何在正则表达式中匹配由其他组分隔的组?

时间:2014-08-23 15:07:11

标签: regex

我正在编写一个正则表达式来匹配遵循特定复杂格式的项目列表,因此正则表达式非常长。此列表中的项目必须用逗号分隔,可以选择用右侧的一个空格或两侧的空格填充,因此匹配分隔符的正则表达式为( , )|(, ?)。另外,我希望列表在方括号之间。

例如,它应符合以下内容:

  • []
  • [validItem]
  • [validItem,validItem,validItem]

但不是以下内容:

  • [validItem,invalidItem]
  • [validItemvalidItem]
  • [validItem,validItem]

我目前使用的正则表达式是:\[verylongregex(?:(?: , )|(?:, ?)verylongregex)*\],但我想简化此操作以包含仅与元素格式匹配一次的正则表达式模式。

正则表达式是否有匹配由另一个组分隔的X组的方法?

1 个答案:

答案 0 :(得分:0)

这是一个答案。我不知道这是不是你要找的东西,但它仍然存在。

1 /假设你想要在一个组中捕获列表:

(\[(?:complexRegex(?: , |, ?|\]))+)

演示:http://regex101.com/r/pW2oZ1/1

2 /假设你想要单独匹配列表中的所有元素,这是一个复杂得多的事情(至少我的知识......)。这是一个有效(复杂)的解决方案:

(?:\[|(?!\[)\G(?: , |, ?))(complexRegex)(?=(?:(?: , |, ?)complexRegex)*\])

演示:http://regex101.com/r/iB3jD1/2

如果需要,我现在没有时间写一个解释。如果你想要一个,请在评论中提出,我今天晚些时候会写。遗憾...