開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

正規表現の「量指定子」一覧と、使用例まとめ。

最終更新:2017-09-19 by Joe

正規表現における量指定子は、特定文字の連続やパターンの繰り返しを記述します。

パターンの連続を表現する「量指定子」

直前の文字やパターンの連続を表現する特殊文字を「量指定子」と呼ぶことがあります。デフォルトでは「最長一致」をマッチしますが、意図的に最短一致をマッチしい場合は、そのような表現を記述する必要があります。

量指定子の一覧

量指定子(最長一致)最短一致意味
**?直前のパターンの0回以上連続
++?直前のパターンの1回以上連続
???直前のパターンの0回か1回の出現
{N} - 直前のパターンのN回の連続
{min,}{min,}?直前のパターンのmin回以上の連続
{,max}{,max}?直前のパターンのmax回以下の連続
{min,max}{min,max}?直前のパターンのmin回からmax回の連続

Vimの量指定子の一覧

量指定子に限ったことではないのですが、Vimのデフォルトのmagicでは、記法が異なるため、注意が必要です。

量指定子(最長一致)最短一致意味
\*\{-}直前のパターンの0回以上連続
\+\{-,}直前のパターンの1回以上連続
\=N/A直前のパターンの0回か1回の出現
\{-N} - 直前のパターンのN回の連続
\{-min,}{-min,}?直前のパターンのmin回以上の連続
{-,max}{-,max}}?直前のパターンのmax回以下の連続
{-min,max}{-min,max}?直前のパターンのmin回からmax回の連続

量指定子を使った正規表現の例

1)4桁の数字の表現

基本的な数字の桁数の表現です。

// 例:1224をマッチ
[0-9]{4}

2)2000年以上の日付の表現

日付は桁数の表現の応用です。どんな数字をマッチするか、仕様にあわせて正規表現を書き換えください。

// 日付。例:2017-12-21をマッチ
2[0-9]{3}-[01]?[0-9]-[0-3]?[0-9]

3)HTMLの1つのimgタグをマッチする表現

HTML文書では、タグは、文書内(行内)に連続して現れる可能性が大きいでしょう。「.+」などはGreedyに最短一致を検出してしまいますので、最短一致で記述する必要があります。

// <img src="regex.png" alt="正規表現">をマッチ
<img .+?>

4)imgタグのsrc属性をマッチする

応用編で、src属性のテキストのみをマッチします。()で囲むことで後方参照できます。

// <img src="regex.png" alt="正規表現">の「regex.png」をマッチ
<img .+? src=['"](.+?)['"].+?>&nbsp;

PHPの例です。

パターンにデリミタ「/」を使用、また、適切にエスケープしてやる必要があります。

$pattern = '/<img.+?src=[\'\"](.*?\.png)[\'\"].*?>/';
$subject = '<nav><a href="regex.html"><img src="regex.png"></a></nav>';

// マッチングを
if ( preg_match( $pattern, $subject, $result ) ) {
  var_dump($result);
}

exit;

$resultは配列で、初項に全体のパターン全体のマッチ、2番目移行に「()」でグルーピングしたサブパターンのマッチが格納されます。

preg_match() 関数自体は、マッチが見つかれば1、見つからなければ0, 何かエラーがあれば、falseを返します。

PHPマニュアルです。

参考

より多くの表現は、こちらの記事をご覧ください

最短一致はこちらでも詳しく解説しています。

 

 

閉じる