开发者

Making a capturing regex repeat

开发者 https://www.devze.com 2023-03-12 07:40 出处:网络
I have a regex \\[\\[(.+)\\]\\]. I use it to capture wikilinks like hey I [[am]] so awesome (captures am). How could I modify this so that hey I [[am]] more [[awesome]] than yo开发者_开发百科u think y

I have a regex \[\[(.+)\]\]. I use it to capture wikilinks like hey I [[am]] so awesome (captures am). How could I modify this so that hey I [[am]] more [[awesome]] than yo开发者_开发百科u think yields both am and awesome, separately? My attempts have yielded single strings like am]] more [[awesome. A little context: I'm using this to write a Ruby IRC bot.

P.S. Wikilinks can also be multi-word, like hey I am much [[more awesome]] than you [[probably think]].


You need to make the .+ non-greedy:

\[\[(.+?)\]\]

See this reference: ruby regexen.


You might use a non-greedy version, e.g. \[\[(.+?)\]\] (note the question mark).


String's scan operators should work to capture everything the regex you are looking for is /\[\[([^\]])+\]\]/ the [\]]+ being key. that will match through until the first ] and stop.

string.scan( /\[\[([^\]])+\]\]/ );
0

精彩评论

暂无评论...
验证码 换一张
取 消