@kyanny's blog

私は天才ではありません。ただ、人より長く一つの事と付き合っていただけです - アインシュタイン

ripgrep: 電話番号っぽい文字列を検索する

先読み (Lookahead) 後読み (Lookbehind) を使うには --pcre2 オプションが必要。

$ rg --pcre2 '(?<!\d)\d{2,3}-?\d{4}-?\d{4}(?!\d)'

正規表現で雑にひっかけてるだけなのでノイズも多い。厳密さを求めるならば Number::Phone::JP - Validate Japanese phone numbers - metacpan.org のようなライブラリを利用すると良い。

とりあえずざっと抽出して人間が目視でチェックする、などの用途であれば上記で事足りる場合もある。

あまり事足りてない例(https://github.com/tokyo-metropolitan-gov/covid19 のソースコード内に書かれている電話番号っぽいものを検索する)

~/ghq/github.com/tokyo-metropolitan-gov/covid19
❯ rg --pcre2 '(?<!\d)\d{2,3}-?\d{4}-?\d{4}(?!\d)' | perl -ple 's/\s//g' | sort | uniq | head -n 30
components/cards/ConfirmedCasesAttributesCard.vue::url="'https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000068'"
components/cards/ConfirmedCasesNumberCard.vue::url="'https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000068'"
components/cards/MonitoringConfirmedCasesNumberCard.vue:url="https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000068"
components/cards/MonitoringConsultationDeskReportsNumberCard.vue:url="https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000070"
components/cards/TelephoneAdvisoryReportsNumberCard.vue::url="'https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000071'"
pages/contacts.vue:03-5388-2319
pages/contacts.vue:03-5388-2453
pages/contacts.vue:<ahref="tel:03-3816-5700">03-3816-5700</a><br/>
pages/contacts.vue:<ahref="tel:03-5388-0567"class="importantContact"
pages/contacts.vue:<ahref="tel:03-5388-2319">
pages/contacts.vue:<ahref="tel:03-5388-2453">
pages/contacts.vue:<tdclass="tel"><ahref="tel:03-5320-6705">03-5320-6705</a></td>
pages/contacts.vue:<tdclass="tel"><ahref="tel:03-5388-2171">03-5388-2171</a></td>
pages/contacts.vue:<tdclass="tel"><ahref="tel:03-5388-3317">03-5388-3317</a></td>
pages/contacts.vue:<tdclass="tel"><ahref="tel:03-5388-3581">03-5388-3581</a></td>
pages/contacts.vue:>03-3251-7881</a
pages/contacts.vue:>03-5320-4877</a
pages/contacts.vue:>03-5388-0567</a
pages/contacts.vue:>03-5388-3061</a
pages/contacts.vue:>03-5388-3094</a
pages/contacts.vue:href="tel:03-5320-4877"
pages/contacts.vue:href="tel:03-5388-3061"
pages/contacts.vue:href="tel:03-5388-3094"
pages/contacts.vue:{{$t('経営に関すること')}}<br/><ahref="tel:03-3251-7881"
pages/flow.vue:03-5320-4592</a
pages/flow.vue:<a:class="$style.tel"href="tel:03-5320-4592">
yarn.lock:resolved"https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f"
yarn.lock:resolved"https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751"
yarn.lock:resolved"https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
yarn.lock:resolved"https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"