正则表达式匹配表示optgroup和选项标签的字符串

时间:2014-08-17 09:34:21

标签: ruby regex

我正在尝试使用一个reg ex来匹配表示optgroup和option标签的字符串。目的是建立一个匹配层次结构,可用于构建散列,其中每个键表示一个optgroup值,每个值都是一个选项数组。

字符串如下所示:

group: group1
option1
option2
option3
group: group2
option1
option2
option3

我得到了这个注册表:

/(?<=group:\s)(([^\n]+(?))([\S\s]*?)(?=group:\s|\z))/gm

首先匹配每个group,即两个group:字符串之间的所有内容。第一个group:但不包括第二个group1。然后它将子组作为optgroup的名称进行匹配。在这种情况下{{1}}。

但我似乎无法想出一个可以单独匹配以下每一行的模式。

1 个答案:

答案 0 :(得分:1)

这很有趣,但我不认为正则表达式可以处理这个问题。这些组代表字符串,而不是列表。如果一个组包含在多次匹配的模式的一部分中,则返回最后一个匹配。

所以即使你写得正确(demo):

(?<=group:\s)(.*)((?:\n)(?!group:).*)*

捕获组将包含:

('group1', 'option3')

您可以使用两个正则表达式,一个用于匹配整个组,而ont用于匹配行,或者如果模式非常简单,请使用与整个组匹配的正则表达式,然后拆分行。