もちろん1文字ずつ順番に取り出してもいいんですが、
[mikeda@cent ~]$ perl -e 'print map "$_\n", "abcde"=~/(.)/g'
a
b
c
d
e
[mikeda@cent ~]$
バラすといえばsplitを使いたい。
しかしワード間アンカーの\bはあるが、文字と文字の間にマッチするアンカーはたしかない。
実はsplitの区切りを空、つまり//にするとできます。
[mikeda@cent ~]$ perl -e 'print map "$_\n", split //, "abcde"'
a
b
c
d
e
[mikeda@cent ~]$
マッチ条件が空ということはどう解釈すればいいのか。何も取り込まずに条件が成立するアンカー的要素にマッチし、それは文字と文字の間も含むと考えればいいのかな。
ちなみに上の結果を見ればsplitは最初の文字「a」から最後の文字「e」の間を処理範囲としてることがわかります。これに対して通常の正規表現で同じようなことをやると行頭、行末も処理範囲に含んでいることを確認できます。
[mikeda@cent ~]$ perl -e '$_="abcde"; s//\n/g; print' a b c d e [mikeda@cent ~]$
使い道?
・・・