blog/content/post/2008-02-18-『新版perl言語プログラミング...

99 lines
4.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 『新版Perl言語プログラミングレッスン入門編』第章・正規表現の基本
author: kazu634
date: 2008-02-18
url: /2008/02/18/_865/
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3745;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- Perl
- Programming
---
<div class="section">
<p>
 今日からは正規表現を頑張ってみます。基本的に正規表現のイロハは知っているので、Perlでどのように正規表現を使うのかを知ることが学習のメインポイントになると思っています。
</p>
<p>
追記:  基本だから、結構知っていることばっかりだったかも。
</p>
<p>
<a name="seemore"></a>
</p>
<h4>
正規表現を用いて「マッチ」しているかどうかを調べる
</h4>
<p>
 「=~」演算子を用いることで、「左辺の文字列が右辺のパターンに一致するかどうか」を調べます。
</p>
<pre class="syntax-highlight">
<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">my</span> <span class="synIdentifier">$str</span> = <span class="synConstant">'yesterday'</span>;
<span class="synStatement">if</span> (<span class="synIdentifier">$str</span> =~<span class="synStatement"> /</span><span class="synConstant">yes</span><span class="synStatement">/</span>) {
<span class="synStatement">print</span> <span class="synConstant">&#34;Match!</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>;
} <span class="synStatement">else</span> {
<span class="synStatement">print</span> <span class="synConstant">&#34;No Match!</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>;
}
</pre>
<h4>
マッチした文字は変数 $& に格納される
</h4>
<pre class="syntax-highlight">
<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">my</span> <span class="synIdentifier">$str</span> = <span class="synConstant">'yesterday'</span>;
<span class="synStatement">if</span> (<span class="synIdentifier">$str</span> =~<span class="synStatement"> /</span><span class="synConstant">yes</span><span class="synStatement">/</span>) {
<span class="synStatement">print</span> <span class="synConstant">&#34;</span><span class="synIdentifier">$&#38;</span><span class="synConstant"> --- Match!</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>;
} <span class="synStatement">else</span> {
<span class="synStatement">print</span> <span class="synConstant">&#34;No Match!</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>;
}
</pre>
<p>
このようにすると、変数 $& には「yes」が格納される。
</p>
<h4>
正規表現の「?」
</h4>
<p>
 直前にあるのが「あっても、なくても構わない」ことを示します。
</p>
<h4>
マッチした文字列を置き換える
</h4>
<p>
 「s///」を使うよ!
</p>
<pre class="syntax-highlight">
<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">my</span> <span class="synIdentifier">$str</span> = <span class="synConstant">&#34;This is a cat. That is a cat, too.</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>;
<span class="synIdentifier">$str</span> =~ <span class="synStatement">s/</span><span class="synConstant">cat</span><span class="synStatement">/</span><span class="synConstant">dog</span><span class="synStatement">/</span>;
<span class="synStatement">print</span> <span class="synIdentifier">$str</span>;
</pre>
<p>
「s/cat/dog/」を使うと、最初にマッチしたcatだけを置換して、文字列の残りは無視されることに注意ただし、次のようにすると全部置換してくれる。
</p>
<pre class="syntax-highlight">
<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">my</span> <span class="synIdentifier">$str</span> = <span class="synConstant">&#34;This is a cat. That is a cat, too.</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>;
<span class="synIdentifier">$str</span> =~ <span class="synStatement">s/</span><span class="synConstant">cat</span><span class="synStatement">/</span><span class="synConstant">dog</span><span class="synStatement">/g</span>;
<span class="synStatement">print</span> <span class="synIdentifier">$str</span>;
</pre>
</div>