Thread irssi: mehrere RegEx in einer Zeile traversieren (4 answers)
Opened by Cthulhux at 2013-08-04 17:46

Raubtier
 2013-08-04 18:58
#169350 #169350
User since
2012-05-04
1070 Artikel
BenutzerIn
[default_avatar]
2013-08-04T15:46:22 Cthulhux
Code (perl): (dl )
1
2
3
4
5
    if (/\[\[(\w|\s|!|#|\/|\.|-|\(|\)|\\|{|}|_|^|°|,|`|\/|;|'|\:|\[|\])*\]\]/i {
        my $wplink = linkify($&);
        my $retval = "http://de.wikipedia.org/wiki/" . encode('latin1',$wplink);
        $server->command("MSG $target $retval");
    }


In beiden Regexps benutzt du den *, dieser matcht also so viele Zeichen wie möglich und sucht dann also praktisch von hinten die passenden ]] oder }}. Du möchtest die aber von vorne suchen, also die ersten ]] hinter den [[, d.h. du musst hier statt des * ein *? verwenden.

Und als zweites kannst du das if durch while ersetzen.

Als drittes:
Die Ausdrücke sehen unnötig kompliziert aus. Wenn du mehrere Zeichen erlauben willst, kannst du statt a|b|c|d einfach [abcd] schreiben (und wenn die Zeichen zusammenhängen, geht auch [a-d].

Ich vermute, dass ich wahrscheinlich eher ein s/// genommen hätte und damit die [[ und ]] gleich entfernt hätte - dein linkify machst ja eigentlich auch nicht einen Link, wie der Name vermuten lassen würde, sondern entfernt ja diese nur. Und ich finde es angenehmer, das gefundene mit () einzufangen und dann $1 zu nehmen statt $&

View full thread irssi: mehrere RegEx in einer Zeile traversieren