前節では複数の文字にマッチさせるための方法を紹介しました。 この節ではもっと細かくマッチングをする方法として、正規表現の拡張機能を紹介します。
まず最初の拡張機能は幅0の肯定前方アサ−ション?=です。 幅が0のパターンには単語境界があります。 さきに例を紹介しましょう。
/\w+(?=\s)/
上のスクリプトのように、拡張機能を使うときはその部分を( )でくくります。 上の正規表現では、その後に空白文字が続くような単語構成文字にマッチします。 例えば"Can you celebrate?"の"Can"にはマッチしますが"candle"や"candy"にはマッチしません。 また、
/宮城県(?=仙台市)/
という正規表現は、「宮城県仙台市」にはマッチしますが「宮城県石巻市」や「宮城県県庁」にはマッチしません。
次は幅0の否定前方アサーション?!です。 こちらは?=とは反対、アサーションに含まれている文字列が後に続かないような文字列にマッチさせたいときに使います。 例えば、
/\w+(?!\s)/
とすると、その後に空白文字が続かないような単語構成文字にマッチします。 上の正規表現は"Can you celebrate?"の"Can"にはマッチしませんが"candle"や"candy"にはマッチします。 また、
/宮城県(?!仙台市)/
という正規表現は、(先ほどとは反対に)「宮城県仙台市」にはマッチしませんが、「宮城県県庁」や「宮城県石巻市」にはマッチします。
最後に紹介する正規表現の拡張機能は?iです。 これは特定の文字列に対して大文字、小文字を区別しないようにしたいときに使います。 まず例を見てみましょう。
$name = "(?i)can";
/$name/
?i拡張機能は正規表現の中に書くのではなく、大文字と小文字を区別させたくない文字列の先頭に挿入します。 上のようにすると、"can"という文字列に対してのみ大文字と小文字を区別しないように出来ます。 ?iは、第1章で作った認証スクリプトのような物で、ユーザ名は大文字と小文字を区別させたくないけれど、パスワードについては大文字と小文字を区別したいというような場合に便利です。
この節では正規表現の拡張機能として?=、?!、?iの3つを紹介しました。 次の節ではパターンマッチに関するいろいろな演算子についてお話します。