如何捕获代码中的所有内容(。*),例如[foo]捕获此[/ foo] [foo]和此[/ foo]

时间:2018-10-23 18:16:00

标签: ruby regex

在我的字符串中,出现了一个或多个以[foo]开始并以[/foo]结尾的标记。因此,想象一个像这样的字符串:

string = "[foo] Text inside tags [/foo] Text between tags [foo] Text inside tags [/foo]"

我想捕获每次出现的内容。如果只有一种情况,我的正则表达式可能就是:

regex = /\[foo\](.*)\[\/foo\]/

由于标签中可能包含任何内容,因此我必须使用.*来捕获它。但是,这样做最终捕获了第一个[foo]和最后一个[/foo]之间的所有内容:

< string.scan(regex)
=> [[" Text inside tags [/foo] Text between tags [foo] Text inside tags "]]

Link to the regex at Rubular

如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

更改正则表达式,以便您不匹配“所有内容”,而仅匹配“除方括号之外的所有内容”:

\[foo\]([^\[\]]*?)\[\/foo\]