■2005-07-30
* [メモ][Perl] splitに(?=regexp)を渡す
Perlのsplit
の第一引数には正規表現を渡しますが、これ、先読み宣言や後読み宣言も渡せるんですね。
これは最近HTML::Templateのソースを見る必要があって、そこでsplit(/(?=<)/,$self->{template})
というのが出てきて初めて知りました。split(/</,$str)
だと'<'がデリミタになるので'<'自体は削除されてしまいますが、(?=<)を渡せば'<'は消費されないため、'<'がついたまま分割できるわけです。
my $str = "<aa>bb<cc>dd\n<ee>"; my @array = split(/(?=<)/,$str); # 返るリスト # <aa>bb # <cc>dd # # <ee>
言われてみれば「なるほど」なのですが、splitに渡すなんて思いもよりませんでした。なんか色々使えそう。 (?=<)(.*?)(?<=>)
とか?
[追記] なんかrubyやjavascriptでもできるそうで(jmukp@MM、ma.la@del.icio.us)。それでは、とJava 1.4でやったら、出来ました。
今日もDamian ConwayのTutorial. Tutorialの題目と同じタイトルのサイン本と一緒に。...