使用Text :: Balanced查找括在括号{{..}}或[[..]]

时间:2017-08-31 01:11:46

标签: regex perl brackets

我想使用Text::Balanced提取一些使用{{ ... }}[[ ... ]]来标记其超链接的标记。例如:

This line contains {{path:to:mediafile|a hyperlink}} and [[path:to:page|another]] too.

extract_bracketed()是明智的,因为它知道括号对 - {}[]<>() - 并寻找开放和关闭括号相同&#34;形状&#34;。但是,我无法使用它,因为它只适用于单字符括号。

我可以使用extract_tagged()找到一种类型的&#34;胖支架&#34;一次,如果它理解几个对称括号对,那将会很好。 有没有办法使用Text :: Balanced来提取由{{}}[[]]包围的字符串,而不是{{]],例如?

1 个答案:

答案 0 :(得分:0)

由于它们不能嵌套,因此可以在没有Text :: Balanced的情况下轻松完成。

s/
   \{\{ ( (?:(?!\}\}).)* ) \}\}
   |
   \[\[ ( (?:(?!\]\]).)* ) \]\]
/
   defined($1) ? handle_curlies($1) : handle_squares($2)
/sexg