<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>正規表現 | リョクちゃの電脳日記</title>
	<atom:link href="https://dreamparadaisu.com/tag/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE/feed/" rel="self" type="application/rss+xml" />
	<link>https://dreamparadaisu.com</link>
	<description>今まで学んできたことや、新たに学んだこと、趣味を通して様々な人と共有できたらなと思いはじめた電脳日記。</description>
	<lastBuildDate>Wed, 27 Apr 2022 23:49:16 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<atom:link rel='hub' href='https://dreamparadaisu.com/?pushpress=hub'/>
<site xmlns="com-wordpress:feed-additions:1">180489529</site>	<item>
		<title>【PowerShell】正規表現を使って電話番号をマッチングさせてみた</title>
		<link>https://dreamparadaisu.com/powershell_17/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=powershell_17</link>
		
		<dc:creator><![CDATA[リョクちゃ]]></dc:creator>
		<pubDate>Wed, 27 Apr 2022 23:49:16 +0000</pubDate>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[正規表現]]></category>
		<guid isPermaLink="false">https://dreamparadaisu.com/?p=4135</guid>

					<description><![CDATA[<p>どうも！リョクちゃです。 ご無沙汰しております。 &#160; 月日が流れてなんと1カ月更新できていなかったです。。。すみません！ 気を取り直して、今回は正規表現をなんとPowerShellで使ってみた記事になります。 ...</p>
The post <a href="https://dreamparadaisu.com/powershell_17/">【PowerShell】正規表現を使って電話番号をマッチングさせてみた</a> first appeared on <a href="https://dreamparadaisu.com">リョクちゃの電脳日記</a>.<div class='yarpp yarpp-related yarpp-related-rss yarpp-related-none yarpp-template-list'>

この投稿の関連記事が見つかりませんでした。
</div>
]]></description>
										<content:encoded><![CDATA[<p>どうも！リョクちゃです。</p>
<p>ご無沙汰しております。</p>
<p>&nbsp;</p>
<p>月日が流れてなんと1カ月更新できていなかったです。。。すみません！</p>
<p>気を取り直して、今回は正規表現をなんとPowerShellで使ってみた記事になります。</p>
<p>&nbsp;</p>
<p>ちなみに前回はこちら</p>
<div class="blog-card internal-blog-card blog-card-thumbnail-right cf"><div class="blog-card-thumbnail"><a href="https://dreamparadaisu.com/powershell_16/" class="blog-card-thumbnail-link"><img width="100" height="100" src="https://dreamparadaisu.com/wp-content/uploads/2022/02/powershell_39-100x100.png" class="blog-card-thumb-image wp-post-image" alt="" srcset="https://dreamparadaisu.com/wp-content/uploads/2022/02/powershell_39-100x100.png 100w, https://dreamparadaisu.com/wp-content/uploads/2022/02/powershell_39-150x150.png 150w, https://dreamparadaisu.com/wp-content/uploads/2022/02/powershell_39-120x120.png 120w" sizes="(max-width: 100px) 100vw, 100px" /></a></div><div class="blog-card-content"><div class="blog-card-title"><a href="https://dreamparadaisu.com/powershell_16/" class="blog-card-title-link">【PowerShell】関数を1行で2回関数を呼び出すには？！～その策は邪道なのか～</a></div><div class="blog-card-excerpt">ふとPowerShellでスクリプトを書いていると行数を短くしたいという欲に駆られることはないでしょうか？例えば、いくつか関数を作っていて、1つの変数にいくつかの関数を組み合わせた答えを代入したいときとか。そういったときに1行で2回関数を呼び出す記述を紹介していきます。</div></div><div class="blog-card-footer"><div class="blog-card-site">dreamparadaisu.com</div><div class="blog-card-hatebu"><a href="//b.hatena.ne.jp/entry/https://dreamparadaisu.com/powershell_16/" rel="nofollow"><img src="//b.hatena.ne.jp/entry/image/https://dreamparadaisu.com/powershell_16/" alt="" /></a></div><div class="blog-card-date">2022-02-27 18:56</div></div></div>
<p>&nbsp;</p>
<p style="text-align: center"><a href="//af.moshimo.com/af/c/click?a_id=3389582&amp;p_id=2181&amp;pc_id=4554&amp;pl_id=29594&amp;guid=ON" rel="nofollow"><img fetchpriority="high" decoding="async" alt="" style="border: none" src="//image.moshimo.com/af-img/1597/000000029594.png" width="640" height="100"></a>
<img decoding="async" alt="" style="border: none" src="//i.moshimo.com/af/i/impression?a_id=3389582&amp;p_id=2181&amp;pc_id=4554&amp;pl_id=29594" width="1" height="1"></p>
<p>&nbsp;</p>
<h1>正規表現とは？</h1>
<p>&nbsp;</p>
<p>調べてみると</p>
<blockquote><b>正規表現</b>（せいきひょうげん、<a title="英語" href="https://ja.wikipedia.org/wiki/%E8%8B%B1%E8%AA%9E">英</a>: <span lang="en">regular expression</span>）は、<a title="文字列" href="https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E5%88%97">文字列</a>の集合を一つの文字列で表現する方法の一つである。<ruby class="yomigana"><b>正則表現</b>
<span class="rp">（</span>
<rt>せいそくひょうげん</rt>
<span class="rp">）</span></ruby>とも呼ばれ、<a title="形式言語" href="https://ja.wikipedia.org/wiki/%E5%BD%A2%E5%BC%8F%E8%A8%80%E8%AA%9E">形式言語</a>理論の分野では比較的こちらの訳語の方が使われる。まれに<ruby class="yomigana"><b>正規式</b>
<span class="rp">（</span>
<rt>せいきしき</rt>
<span class="rp">）</span></ruby>と呼ばれることもある。
<p style="text-align: right"><a href="https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE">出典：フリー百科事典『ウィキペディア（Wikipedia）』</a></p>
</blockquote>
<p>となっています。</p>
<p>&nbsp;</p>
<p>かいつまんで、解釈すると</p>
<p>とある<strong>文字列</strong>の中から<strong>あるパターン</strong>(<span style="text-decoration: underline">正規表現のパターン</span>)に</p>
<p><strong>一致する文字列</strong>を検索する際に活用される<span style="text-decoration: underline">表現法のひとつ</span>になります。</p>
<p>&nbsp;</p>
<p>正規表現については、おそらく下記URLの記事がとても参考になります。</p>
<p>あえて、ここでは<span style="text-decoration: underline">詳細には記載していませんのでご了承ください</span>。</p>
<p><a href="https://userweb.mnet.ne.jp/nakama/#about">サルにもわかる正規表現入門</a></p>
<p>&nbsp;</p>
<h2>他言語での正規表現に関する記事</h2>
<p>正規表現については、他の言語でも活用した記事を紹介していました。</p>
<p>&nbsp;</p>
<h3>VB.Net</h3>
<div class="blog-card internal-blog-card blog-card-thumbnail-right cf"><div class="blog-card-thumbnail"><a href="https://dreamparadaisu.com/visualbasic_32/" class="blog-card-thumbnail-link"><img width="100" height="100" src="https://dreamparadaisu.com/wp-content/uploads/2020/11/regular_expression_3-100x100.png" class="blog-card-thumb-image wp-post-image" alt="" srcset="https://dreamparadaisu.com/wp-content/uploads/2020/11/regular_expression_3-100x100.png 100w, https://dreamparadaisu.com/wp-content/uploads/2020/11/regular_expression_3-150x150.png 150w, https://dreamparadaisu.com/wp-content/uploads/2020/11/regular_expression_3-120x120.png 120w" sizes="(max-width: 100px) 100vw, 100px" /></a></div><div class="blog-card-content"><div class="blog-card-title"><a href="https://dreamparadaisu.com/visualbasic_32/" class="blog-card-title-link">【VB.Net】正規表現を使ってMACアドレスを判定する</a></div><div class="blog-card-excerpt">MACアドレスを正規表現を使って判定する方法を紹介しています。MACアドレスは、0~9の半角数字にA~F(a~f)の半角英字で構成されます。</div></div><div class="blog-card-footer"><div class="blog-card-site">dreamparadaisu.com</div><div class="blog-card-hatebu"><a href="//b.hatena.ne.jp/entry/https://dreamparadaisu.com/visualbasic_32/" rel="nofollow"><img src="//b.hatena.ne.jp/entry/image/https://dreamparadaisu.com/visualbasic_32/" alt="" /></a></div><div class="blog-card-date">2020-11-08 01:43</div></div></div>
<p>&nbsp;</p>
<h1>PowerShellで正規表現を使うには？</h1>
<p>&nbsp;</p>
<p>正規表現をPowerShellで使うには、</p>
<p>&nbsp;</p>
<div class="sp-info">&#8220;検索したい文字列&#8221; -match &#8220;正規表現パターン&#8221;</div>
<p>&nbsp;</p>
<p>と記述することで検索したい文字列が正規表現のパターンにマッチしているか</p>
<p>どうかを判定し、True/Falseで結果を返してくれます。</p>
<p>&nbsp;</p>
<p><strong>-match</strong>が肝です。</p>
<h2>電話番号</h2>
<p>電話番号には、<strong>固定電話</strong>や<strong>携帯電話、PHS</strong>などがあります。</p>
<p>&nbsp;</p>
<h3>固定電話</h3>
<p>&nbsp;</p>
<p><a href="https://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/q_and_a.html#q2">総務省のページ</a>より</p>
<p>初めの0、国内プレフィックスから始まり。</p>
<p>&nbsp;</p>
<p>・市外局番(1～4桁)</p>
<p>・市内局番(1～4桁)</p>
<p>&nbsp;</p>
<p>・加入者番号(4桁)</p>
<p>&nbsp;</p>
<p>となっています。</p>
<p>つまりは、</p>
<p>&nbsp;</p>
<div class="sp-primary">0 -【市外局番(1～4桁)市内局番(1~4桁)】- 加入者番号(4桁)</div>
<p>&nbsp;</p>
<ul>

<li>
<div class="sp-info"><span style="font-size: 20px">0-▲-××××-□□□□</span></div></li>

<li>
<div class="sp-info"><span style="font-size: 20px">0-▲▲-×××-□□□□</span></div></li>

<li>
<div class="sp-info"><span style="font-size: 20px">0-▲▲▲-××-□□□□</span></div></li>

<li>
<div class="sp-info"><span style="font-size: 20px">0-▲▲▲▲-×-□□□□</span></div></li>
</ul>
<p>&nbsp;</p>
<p>0 ⇒ 国内プレフィックス</p>
<p>▲ ⇒ 市外局番</p>
<p>× ⇒ 市内局番</p>
<p>□ ⇒ 加入者番号</p>
<p>&nbsp;</p>
<p>のパターンが現在あるようです。</p>
<p>&nbsp;</p>
<h3>携帯電話・PHS</h3>
<p>&nbsp;</p>
<p>こちらも<a href="https://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/q_and_a.html#q5">総務省のページより</a></p>
<p>070、080や090から始まる11桁の番号を携帯電話・PHSとしているようです。</p>
<p>&nbsp;</p>
<p>元々070はPHSで使われていた番号なのですが、最近は携帯電話の番号を変更することなく、</p>
<p>移すことができる制度、MNP(携帯電話番号ポータビリティ)によって</p>
<p>携帯電話との区別がなくなってきました。<span style="font-size: 14px">※平成26年10月1日施行</span></p>
<p>&nbsp;</p>
<p>パターンとしては</p>
<ul>

<li>
<div class="sp-info"><span style="font-size: 20px">070 &#8211; ○○○○ &#8211; ○○○○</span></div></li>

<li>
<div class="sp-info"><span style="font-size: 20px">080 &#8211; ○○○○ &#8211; ○○○○</span></div></li>

<li>
<div class="sp-info"><span style="font-size: 20px">090 &#8211; ○○○○ &#8211; ○○○○</span></div></li>
</ul>
<p>になります。</p>
<p>&nbsp;</p>
<h1>電話番号の正規表現</h1>
<p>&nbsp;</p>
<p>ここからは前述した固定電話と携帯電話・PHSの正規表現を構築していきます。</p>
<p>&nbsp;</p>
<h2>固定電話の正規表現</h2>
<p>&nbsp;</p>
<p>固定電話の場合は、4パターンありました。</p>
<p>そのため正規表現は、以下のような形になります。</p>
<p>&nbsp;</p>
<p><strong>^0(<span style="color: #ff9900">(</span>[0-9]-[0-9]{4}<span style="color: #339966">|</span>[0-9]{2}-[0-9]{3}<span style="color: #339966">|</span>[0-9]{3}-[0-9]{2}<span style="color: #339966">|</span>[0-9]{4}-[0-9]<span style="color: #ff9900">)</span></strong></p>
<p><strong>-[0-9]{4})$</strong></p>
<p>&nbsp;</p>
<p>正規表現に使われる主な記号は以下の表にまとめています。</p>

<table id="tablepress-67" class="tablepress tablepress-id-67">
<thead>
<tr class="row-1">
	<th class="column-1">No</th><th class="column-2">記号</th><th class="column-3">機能</th>
</tr>
</thead>
<tbody class="row-striping row-hover">
<tr class="row-2">
	<td class="column-1">1</td><td class="column-2">^</td><td class="column-3">始まりを表す。</td>
</tr>
<tr class="row-3">
	<td class="column-1">2</td><td class="column-2">$</td><td class="column-3">終わりを表す。</td>
</tr>
<tr class="row-4">
	<td class="column-1">3</td><td class="column-2">[0-9]</td><td class="column-3">マッチする文字列の範囲を指定。<br />
(今回の場合、文字列内に0～9が含まれているか)</td>
</tr>
<tr class="row-5">
	<td class="column-1">4</td><td class="column-2">|</td><td class="column-3">ORのようなもの<br />
右辺と左辺に書かれたパターンのどれかにマッチするかどうか。</td>
</tr>
<tr class="row-6">
	<td class="column-1">5</td><td class="column-2">{n}</td><td class="column-3">n回の繰り返しにマッチするか</td>
</tr>
<tr class="row-7">
	<td class="column-1">6</td><td class="column-2">-</td><td class="column-3">ハイフンがマッチするか。</td>
</tr>
</tbody>
</table>

<p>&nbsp;</p>
<p>最初は国内プレフィックスから始まるため、0を記述しています。</p>
<p><span style="color: #ff6600">オレンジ()</span>で囲まれた部分が、<span style="text-decoration: underline">市外局番/市内局番の組み合わせを表す</span>正規表現になります。</p>
<p>以降に続く、<strong>-[0-9]{4}</strong>が加入者番号を表現した記述になります。</p>
<p>&nbsp;</p>
<h2>携帯電話・PHSの正規表現</h2>
<p>一方で携帯電話・PHSは以下のような形になります。</p>
<p>&nbsp;</p>
<p><strong>^((070|080|090)-[0-9]{4}-[0-9]{4})$</strong></p>
<p>&nbsp;</p>
<p>となります。</p>
<p>&nbsp;</p>
<p><strong>(070|080|090)</strong>では、はじまりが<strong>070</strong>、<strong>080</strong>、<strong>090</strong>であるかどうかを表しています。</p>
<p>後続の<strong>-[0-9]{4}</strong>でハイフンから始まり<span style="text-decoration: underline">4桁の0～9で始まる数字</span>か</p>
<p>どうかを判定する表現になります。</p>
<p>&nbsp;</p>
<h1>正規表現を使って電話番号をマッチング</h1>
<p>&nbsp;</p>
<p>先で構築した正規表現のパターンを使って、実際に入力された情報が</p>
<p>固定電話か携帯電話・PHSかどうか試してみます。</p>
<p>&nbsp;</p>
<p>固定電話：01-1234-5678を例にコードを書いていきます。
</p><pre class="urvanov-syntax-highlighter-plain-tag">$input = "01-1234-5678"
$tel_ptr = "^0(([0-9]-[0-9]{4}|[0-9]{2}-[0-9]{3}|[0-9]{3}-[0-9]{2}|[0-9]{4}-[0-9])-[0-9]{4})$"

Write-Host $input -match $tel_ptr
# True/Falseが返されます。 ←　今回の場合、 True</pre><p>
&nbsp;</p>
<p>固定電話：012-234-5678
</p><pre class="urvanov-syntax-highlighter-plain-tag">$input = "012-234-5678"
$tel_ptr = "^0(([0-9]-[0-9]{4}|[0-9]{2}-[0-9]{3}|[0-9]{3}-[0-9]{2}|[0-9]{4}-[0-9])-[0-9]{4})$"

Write-Host $input -match $tel_ptr
# True/Falseが返されます。 ←　今回の場合、 True</pre><p>
&nbsp;</p>
<p>固定電話の正規表現で携帯電話をマッチングさせてみると</p>
<p>&nbsp;</p>
<p>固定電話：012-3456-7890
</p><pre class="urvanov-syntax-highlighter-plain-tag">$input = "012-3456-7890"
$tel_ptr = "^0(([0-9]-[0-9]{4}|[0-9]{2}-[0-9]{3}|[0-9]{3}-[0-9]{2}|[0-9]{4}-[0-9])-[0-9]{4})$"

Write-Host $input -match $tel_ptr
# True/Falseが返されます。 ←　今回の場合、 False</pre><p>
Falseとなります。</p>
<p>&nbsp;</p>
<p>次は、携帯電話・PHSのパターンを使って試していきます。</p>
<p>&nbsp;</p>
<p>携帯電話：012-3456-7890
</p><pre class="urvanov-syntax-highlighter-plain-tag">$input = "012-3456-7890"
$tel_ptr = "^((070|080|090)-[0-9]{4}-[0-9]{4})$"

Write-Host $input -match $tel_ptr
# True/Falseが返されます。 ←　今回の場合、 False</pre><p>
&nbsp;</p>
<p>携帯電話：070-3456-7890
</p><pre class="urvanov-syntax-highlighter-plain-tag">$input = "070-3456-7890"
$tel_ptr = "^((070|080|090)-[0-9]{4}-[0-9]{4})$"

Write-Host $input -match $tel_ptr
# True/Falseが返されます。 ←　今回の場合、 True</pre><p>
&nbsp;</p>
<p>このような形で正規表現にマッチングしていれば、Trueを返し、</p>
<p>マッチングしていなければ、Falseを返します。</p>
<p>&nbsp;</p>
<h1>まとめ</h1>
<p>以上、PowerShellで正規表現を使って電話番号をマッチングさせてみました。</p>
<p>&nbsp;</p>
<p>正規表現、最初は戸惑いや難しくってついていけないといった問題に直面しますが、</p>
<p>慣れてくると、意外と便利ではないか。これは使えるな！となってくると思うので</p>
<p>諦めずに学びを止めないでください。</p>
<p>&nbsp;</p>
<p>電話番号以外にも法則性のある文字列であれば、正規表現が作りやすいので</p>
<p>一度読者の方も試していただけたらなと思います。</p>
<p>&nbsp;</p>
<p>代表例で言うと、郵便番号やMACアドレス、西暦などでしょうか。</p>
<p>&nbsp;</p>
<p>最後までお読みいただき、ありがとうございます。</p>
<p>引き続きよろしくお願いいたします。</p>

<p>&nbsp;</p>		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="4135"
					data-ulike-nonce="14a41e1a57"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_4135"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://dreamparadaisu.com/powershell_17/">【PowerShell】正規表現を使って電話番号をマッチングさせてみた</a> first appeared on <a href="https://dreamparadaisu.com">リョクちゃの電脳日記</a>.<div class='yarpp yarpp-related yarpp-related-rss yarpp-related-none yarpp-template-list'>
<p>この投稿の関連記事が見つかりませんでした。</p>
</div>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4135</post-id>	</item>
	</channel>
</rss>
