LoginSignup
9
10

More than 5 years have passed since last update.

【メモ】正規表現でn桁以内の数字列のみ検索する

Last updated at Posted at 2015-10-26

不定形の文字列中の数字部分を抽出してちょっと計算したいんだけど、
1000桁みたいなint型やdouble型に変換したらややこしくなるレベルの桁数が出てきたら
面倒くさくなるからそれは除いて検索しようってなったときにちょっとハマったからメモ。
\d{1,5}とかやっても1234567890とかが出てきたら12345と67890で分かれてマッチしちゃうし
どうしようって思ってたところ、

search_number.php
$number_text =
'999999999999999999
19
18782
999999999999999999999
18782
777
999999999999999999999999
37564
1hoge22bar333foo4444fuga55555piyo666666bora7777777toto88888888';
$pattern = '/(?<!\d)\d{1,5}(?!\d)/';
preg_match_all($pattern, $number_text, $result);
var_dump($result);
//結果↓
// array(1) {
// [0]=>
// array(10) {
// [0]=>
// string(2) "19"
// [1]=>
// string(5) "18782"
// [2]=>
// string(5) "18782"
// [3]=>
// string(3) "777"
// [4]=>
// string(5) "37564"
// [5]=>
// string(1) "1"
// [6]=>
// string(2) "22"
// [7]=>
// string(3) "333"
// [8]=>
// string(4) "4444"
// [9]=>
// string(5) "55555"
// }
// }

どうやらこれで行けたっぽい

簡単な解説

正規表現
'/(?<!\d)\d{1,5}(?!\d)/'

\d{1,5} = 1文字以上5文字以内の半角数字
(?<!\d) = 直前が半角数字でない
(?!\d) = 直後が半角数字でない
否定先読みとか否定後読みとかのアレですね。

9
10
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
9
10