正規表現とは、決められた記号 ( メタ文字 ) と通常の文字 ( アルファベット・日本語 など ) を使用してつくる条件式表現のことです。
正規表現にも用途によって使える種類が限られますが、SPMblockでは全部で11種類のメタ文字を使用することができます。
SPMBlockで使用できるメタ文字
. ( ピリオド )
* ( アスタリスク )
+ ( プラス )
? ( クエスチョン )
[ ] ( ブラケット )
| ( パイプ )
( ) ( バーレン )
{ } ( ブレース )
^ ( キャレット )
$ ( ダラー )
¥ ( 円記号・バックスラッシュ )
ぱっと見、難しくみえますが、数学の公式よりは簡単です。慣れないうちは、例題に文字列を当てはめて条件を作成し、動作が理解できてから意味を覚えていくほうが、分かり易いと思います。
SPMBlockのなかでは、ヘッダーやメールの本文内容検索などの設定に使用します。
メタ文字とは正規表現式のなかで特別な意味をもつ記号です。
これらの組み合わせによって、ある程度の表記のゆらぎを吸収できる条件を作成することができます。
以下に各メタ文字の意味を紹介します。
簡単に言うと「伏せ字」の役割を果たします。
指定する文字が一文字だけなので、他のメタ文字と組み合わせたほうが、より効果を発揮します。
【 使用例 】
【 こん..は 】
< マッチする文字列 >
「こんにちは」「こんばんは」 ... など「こん」と「は」の間に文字が2つ入る言葉。
< マッチしない文字列 >
「こんどからは」「こんとろーるは」 ... など
「直前の文字またはパターンの0回以上の繰り返し」 の意味を表します。
前述の . ( ピリオド ) とは違い、* ( アスタリスク ) は、直前の文字と組み合わせて使用します。
【 使用例 】
【 ほと*ぎす 】
< マッチする文字列 >
「ほぎす」「ほととぎす」「ほととととぎす」 ... など「ほ」と「ぎす」の間に「と」という文字が0回以上繰り返される言葉。
< マッチしない文字列 >
「ほととけぎす」「ほおぎす」 ... など「ほ」と「ぎす」の間に「と」以外の文字が入る言葉。
「直前の文字またはパターンの1回以上の繰り返し」 の意味を表します。* と似ていますが、プラスは必ず1回は出現するので、間違えないようにしてください。
この文字も直前の文字と組み合わせて使用します。
【 使用例 】
【 1234+ 】
< マッチする文字列 >
「1234」「12344444」 ... など「123」の後ろに「4」が1回以上繰り返される言葉。
< マッチしない文字列 >
「123」「765444」 ... など。
「直前の文字またはパターンの0回、または1回の繰り返し」の意味を表します。
この文字も直前の文字と組み合わせて使用します。
【 使用例 】
【 教育大?学? 】
< マッチする文字列 >
「教育」「教育大」「教育学」「教育大学」 ... など「教育」の後ろに「大」か「学」という文字が0〜1回出現する言葉。
< マッチしない文字列 >
「教大学」「教育大大学」 ... など「教育」の後ろでないときや指定文字の2回以上の繰り返しがある言葉。
「 [ ] ( ブラケット ) で囲んだ文字列のいずれかひとつに当てはまる」という意味を表します。
簡単に言うと . ( ピリオド ) の伏せ字の1文字を指定する役割を果たします。
単体で使用することは少なく、他のメタ文字と組み合わせたほうが、効果が発揮されます。
【 使用例 】
【 私は[12345]月生まれ 】
< マッチする文字列 >
「私は1月生まれ」「私は3月生まれ」 ... など「私は」と「月生まれ」の間に [ ] の中の文字のどれかひとつ入る言葉。
< マッチしない文字列 >
「私は6月生まれ」「私は12月生まれ」 ... など「私は」と「月生まれ」の間に [ ] 内に存在しない文字や、存在しても2文字以上入る言葉。
【 使用例2 】
【 私は[1-5]月生まれ 】
実は、上記の【 使用例1 】 とまったく同じ働きをします。ブラケット内に - ( マイナス ) を含めることで、文字列の範囲指定ができます。
上記以外に
[a-z] ( アルファベットのaからzまでの一文字 )
[a-z3-8#%&] ( アルファベットのa〜z,3〜8の数字,#%&の中から一文字 )
[0-9][0-9] ( 二桁以上の数字 ※ 後述の { } ( ブレース ) を使用しても可能です。 )
などのバリエーションも作成できます。
なお[00-99]のような使い方はできません。また、 [ ] ( ブラケット ) では [ ] 内の一文字しか指定できないため、単語を指定する場合は後述の ( ) ( バーレン ) を使用します。
※ ブラケット内ではメタ文字は使用できません。( 他と同じ一文字として扱われます )
| ( パイプ ) とは、「または」の意味を表します。
単体で使用すると記述がややこしくなってしまうので、後述の( ) ( バーレン ) と組み合わせて使用することが多いです。
【 使用例 】
【 学食|購買 】
< マッチする文字列 >
「学食」「購買」
( ) ( バーレン ) で囲んだ文字列は、一文字と同じように扱うことができます。
つまり、文字列( 単語 )に対して * や ? などのメタ文字が使用できます。
【 使用例 】
【 インターネット ( 講座 ) ? 】
< マッチする文字列 >
「インターネット」「インターネット講座」 ... など「インターネット」の後ろに「講座」が0〜1回出現する言葉。前述の?を使用しています。
< マッチしない文字列 >
「イントラネット講座」「インターネット座」 ... など。
【 使用例2 】
【 インターネット ( 講座 | ケーブル ) + 】
< マッチする文字列 >
「インターネット講座」「インターネットケーブル」 ... など「インターネット」の後ろに「講座」または「ケーブル」が1回以上出現する言葉。前述の | ( パイプ ) と + ( プラス ) を使用しています。
< マッチしない文字列 >
「インターネット」 ... など。
{ } ( ブレース ) は、直前の文字またはパターンの繰り返しの回数を指定できます。
【 使用例 】
【 A{3} 】
< マッチする文字列 >
「AAA」 ... など「A」が3回だけ繰り返される場合。
< マッチしない文字列 >
「A」「AAAAA」 ... など。
上記以外に
A{4,} ( Aが4回以上繰り返される場合 )
A{3,5} ( Aが3〜5回繰り返される場合 )
などの記述方式もあります。
ワンポイント
メタ文字には同じ意味で、異なる記述方式が複数存在します。例として
(1|2|3|4|5){1,}
[12345]+
[1-5]+
は同じ意味をもちます。 ( 1〜5までの数字で構成された一桁以上の文字列 )
上記の例では、下に行くほど、スッキリしていて見やすいはずです。
正規表現を記述する際には、なるべくシンプルにしたほうが、管理・理解の面でもたやすくなります。
^ ( キャレット ) は「行の先頭にくる文字またはパターン」の意味を表します。
SPMBlockとはにもあるように、SPAMBlockでは行単位でフィルタの文字列を検索しています。
^ は行の先頭にくる文字列を検索対象としますので、効果がある程度限定されます。
【 使用例 】
【 ^Hello 】
< マッチする文字列 >
「Hello World.」「Hello. I'm a boy」 ... など行頭に「Hello」という文字列が来る場合。
< マッチしない文字列 >
「Say Hello」「( 空白 ) Hello」 ... など「Hello」の前に文字、空白がくる場合。
【 使用例2 】
【 123[^4-6] 】
キャレットのもうひとつの使い方として、前述の [ ] ( ブラケット ) の最初にキャレットを挿入すると、ブラケットの意味を反転させることができます。
< マッチする文字列 >
「12378」「123ダーッ」 ... など「123」の後ろに 「4〜6」の数字以外の文字がくる場合。
< マッチしない文字列 >
「12345」「12369」 ... など「123」の後ろに「4〜6」の数字が表示される場合。
$ ( ダラー ) は前述のキャレットと逆の働きで、「行の末尾にくる文字またはパターン」の意味を表します。
【 使用例 】
【 メール$ 】
< マッチする文字列 >
「お得なメール」「申し込み方法は、葉書 or メール」 ... など行末にメールが来る場合。
< マッチしない文字列 >
「お得なメールです」「メールください。」 ... など。
¥ ( 円記号・バックスラッシュ ) は、前述までのメタ文字自体を検索対象にしたい ( エスケープする ) 場合に使用します。
検索対象にしたいメタ文字の直前に¥を入力します。
【 使用例 】
【 あいう¥(えお¥)】
< マッチする文字列 >
「あいう(えお)」
< マッチしない文字列 >
「あいう(えお)」以外の文字列。
ワンポイント
「1,000¥」という言葉をマッチさせたい場合は
【 1,000¥¥ 】
と、¥を二回続けて入力します。
Copylight © 2019 Joetsu University of Education, the Center for Information and Multimedia Education