読者です 読者をやめる 読者になる 読者になる

文字列を文字配列にバラす

もちろん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 ~]$ 




使い道?
・・・