| YAMANEKO's Laboratory - Perlのかけら |
|
 |
|
|
 |
| 【正規表現】 文章を右端で折り返す |
$a=~s/(.{1,70}\S)\s+/$1\n/g ;
|

|
|
半角英数字専用、単語の境界で折り返します。複雑なことをするようでも、実は正規表現はぜんぜん単純。ただ、全角混じりは、正規表現&置換だけではできない・・ような気がします。
この正規表現の意味は・・(上から順に読んでください)
|
(
|
.{1,70}
|
\S
|
)
|
\s+
|
| |
何かの文字が1〜70文字 |
|
|
|
| |
|
その後ろに空白以外が1文字 |
|
|
| ( |
この部分を$1とする |
) |
|
| |
|
|
|
その後ろに空白が1文字以上 |
|
|
|
|
 |
| 【正規表現】 0詰めされた数字の0をとる |
$a=~s/(?<!\d)0+(\d+)/$1/g ;
|

|
|
2002/05/01 のように、左に0が詰められた数字の0を取り除きます。日付のように/や-で区切られたような文字列の場合、一括で処理できます。
この正規表現の意味は・・
|
(?<!
|
\d
|
)
|
0+
|
(
|
\d+
|
)
|
| |
数字1文字 |
|
|
|
|
|
| が左になくて |
|
|
|
|
| |
|
|
0が1文字以上あって |
|
|
|
| |
|
|
|
|
その後ろに数字が1文字以上 |
|
| |
|
|
|
( |
この部分を$1とする |
) |
|
|
|
|
 |
| 【正規表現】 カンマで位取りする |
$a=~s/(\d+?)(?=(\d{3})+(?!\d))/$1,/g ;
|

|
|
数字に「10,000,000」のようにカンマをふる方法。某書からそのまんま書き写した解説ページはよく見かけるのですが・・ここでは、whileは使わずに、正規表現&置換1発でやってみました。符号は対応、ただし小数点は未対応です。
この正規表現の意味は・・
|
(
|
\d
|
+?
|
)
|
(?=
|
(\d{3})
|
+
|
(?!
|
\d
|
)
|
)
|
| |
数字 |
|
|
|
|
|
|
|
|
|
| |
|
がなるべく少なく1文字以上 |
|
|
|
|
|
|
|
|
| ( |
この部分を$1とする |
) |
|
|
|
|
|
|
|
| |
|
|
|
ただしその右側に |
| |
|
|
|
|
数字3文字の塊 |
|
|
|
|
|
| |
|
|
|
|
|
が1つ以上あって |
|
|
|
|
| |
|
|
|
|
|
|
|
数字1文字 |
|
|
| |
|
|
|
|
|
|
がその右にない |
|
|
|
|
|
|
|