2017-08-31 2 views
-1

Ich möchte Text::Balanced verwenden, um einige Markup zu extrahieren, die {{ ... }} und [[ verwendet ... ]] um seine Hyperlinks zu markieren. Zum Beispiel:Mit Text :: Balanced Saiten in Fett Klammern finden {{..}} oder [[..]]

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

extract_bracketed() ist in dem Sinne, dass es klug über Klammernpaare weiß - {}, [], <>, () - und zum Öffnen und Schließen Klammer sehen, die die gleiche „Form“ sind. Ich kann es jedoch nicht verwenden, da es nur mit Ein-Zeichen-Klammern funktioniert.

kann ich extract_tagged() verwenden zu einem Zeitpunkt, eine solche Art von „Fett Klammer“ zu finden, aber es wäre schön, wenn es mehr Paare symmetrische Klammer verstanden. Gibt es eine Möglichkeit Text verwenden :: Balanced Strings zu extrahieren, die entweder durch {{ und }} oder [[ und ]], aber nicht {{ und ]], beispielsweise eingeschlossen ist?

Antwort

0

Da sie nicht verschachtelt werden können, kann es ohne Text :: Balanced leicht gemacht werden.

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

Wahr, sie können nicht verschachtelt werden. Das funktioniert gut. Würde es Ihnen etwas ausmachen, Ihre Antwort mit den Worten "Anstelle von Text :: Balanced, ..." vorzugeben? – Chap