在我的字符串中,出现了一个或多个以[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 "]]
如何避免这种情况?
答案 0 :(得分:0)
更改正则表达式,以便您不匹配“所有内容”,而仅匹配“除方括号之外的所有内容”:
\[foo\]([^\[\]]*?)\[\/foo\]