我想在Ruby中用正则表达式解析模式。该图案是一样的东西,Ruby正则表达式的帮助
<number>? <comma>? <number>? <term>*
其中:
number
是一个或多个数字comma
是","
term
的形式为[.*]
或[^.*]
和我 我试图捕捉数字和所有条款。为了澄清,这里是有效模式的一些例子:
5,50[foo,bar]
5,[foo][^apples]
10,100[baseball][^basketball][^golf]
,55[coke][pepsi][^drpepper][somethingElse]
在第一个,我想拍摄5
,50
,并[foo,bar]
在第二个,我想拍摄5
,[foo]
和[^apples]
等等。
我想出的模式是:
/(\d+)?,?(\d+)?(\[\^?[^\]]+\])+/
但这只是相匹配的数字,最后一项。如果我在最后删除+
,那么它只匹配第一项。
我已经在Ruby和JavaScript中尝试了这一点 - 但这是返回所有条款合并,并且只分开最后一个条款。由于它返回了所有组合条件 - 第二个例子中的'[foo] [^ apples]'和单独的最后一个术语 - '[^ apples]',我猜它能够找到匹配项,但是它的匹配项没有出现在任何地方的输出。不知道我错过了什么。 – Anurag 2011-05-20 00:30:03
也许我误解了一些东西......你是否试图有效地标记每个“条款”?如果这样的正则表达式不适用于标记化部分,那么在将所有“术语”一起捕获之后,根据'] ['进行分割 - 根据我的理解,没有语言允许其正则表达式引擎中的可变数目的捕获组。我写了一个快速和肮脏的红宝石检查,我将作为一个编辑发布。告诉我,如果我误解了你的问题。 – photoionized 2011-05-20 00:46:18
感谢关于拆分原始输入的建议,然后扫描分组的字符串。它的作品非常漂亮。 – Anurag 2011-05-20 01:12:01