8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

正規表現の例文-任意の桁数で0埋め処理

Posted at

#◆ 目的
数値の桁を揃えたいときに、数字の先頭に0をいれることで
桁数を揃えたいことがあります。

例えばIDを3桁揃えにしたいときは

ID:1
ID:12
ID:123
↓↓
ID:001
ID:012
ID:123

となります。
ただし、4桁が存在した場合は

ID:1234

とそのまま表示させるものとします。

#◆ 検索対象

ID:1
ID:12
ID:123
ID:1234

#◆ 検索文字列、置き換え文字列

1回では出来ないため、2回処理します。

まずは、3桁を超える量の0埋めをします。

(ID:)(\d+)
↓↓
$1000$2

ID:0001
ID:00012
ID:000123
ID:0001234

次に、3桁に調整します。

(ID:)0*(\d{3,})
↓↓
$1$2

ID:001
ID:012
ID:123
ID:1234

#◆ 解説

分解して考えます。
(ID:) (\d+)
↓↓
$1 000 $2

(ID:) 0* (\d{3,})
↓↓
$1 $2

...

まずは、下記の文字列を探索します。

(ID:)

置き換え後に再利用するため ( )で囲みます。※1つ目

(\d+)

次に、数字も ( )で囲みます。※2つ目
最低限1文字の数字がないと意味ないので、
*(0回以上の繰り返し)ではなく
+(1回以上の繰り返し)を利用。

検索にHITした値はそのまま再利用できますが、
◎文字あるから、☆文字を足す
などの振り分け処理は出来ません。
そのためいったん0を多めに入れて、次に任意の桁に調整します。

(ID:) 再度同じ文字列で探索開始
0* 多めに埋めた0を最長マッチ(多めに入れた分は削除)
(\d{3,}) 0埋めのあとに3桁以上の数字

真ん中が、最長マッチなので、最後の数字は基本は3桁だが
4桁以上でもちゃんと取得できる

$1 $2

あとは、最初と最後をくっつけるだけ

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?