PHP 正規表現の繰り返しを表現する指定量子について令和3年 3月 9日 作成

00171

概略

PHPの正規表現の繰り返しを表現する指定量子において、いつもこんがらがるので備忘録も兼ね記事にしておく。

各指定量子について

量指定子とは直前の要素を何回繰り返すのかという指定する特殊文字の事を言います。


下表はその指定量子について説明したものです。

指定量子 説明 使用例
? 直前の要素が0か1回繰り返された場合にマッチ https? → http・https 等にマッチ
* 直前の要素が0回以上繰り返された場合にマッチ go*d → gd・god・good 等がマッチ
+ 直前の要素が1回以上繰り返された場合にマッチ go+ → god・good・google・gooooo 等がマッチ
{n} 直前の要素を n回 繰り返す abc{2} → abcc はこのパターンにマッチ
{n,} 直前の要素を n回以上 繰り返す abc{2,} → abcc・abccc 等がこのパターンにマッチ
{m,n} 直前の要素を m回からn回まで 繰り返す abc{3,5} → abccc・abcccc・abccccc はこのパターンにマッチ

因みに下記は同じ意味。

* = {0,}

+ = {1,}

? = {0,1}

実装方法

量指定子は通常”最長の繰り返し”にマッチする仕様になっています。


【正規表現】

あれは.+だ


【対象文字列】

あれは犬だ あれは猫だ あれは宇宙人だ


【マッチする文字列】

あれは犬だ あれは猫だ あれは宇宙人だ


最長一致 preg_match関数を利用した実際のコード記述例

<?php
	$text = 'あれは犬だ あれは猫だ あれは宇宙人だ';
	$pattern = '/あれは.+だ/';
	$result = preg_match($pattern, $text, $matches);
	
	if($result){
		echo 'マッチしました';
	}else{
		echo 'マッチしませんでした';
	}
	
	var_dump($matches);
	
	
	// 表示結果
	マッチしました
	
	array(1) {
		[0]=> string(57) "あれは犬だ あれは猫だ あれは宇宙人だ"
 	}
?>

量指定子が最長を探してしまうから「あれは犬だ」でマッチしない。



「あれは犬だ」でマッチさせたい場合が最短一致となる。

最短一致させたい場合は、量指定子の直後に【?】を付加し【+?】と記述する事で可能となる。


【正規表現】

あれは.+?


【対象文字列】

あれは犬だ あれは猫だ あれは宇宙人だ


【マッチする文字列】

あれは犬だ

最短一致 preg_match関数を利用した実際のコード記述例

<?php
	$text = 'あれは犬だ あれは猫だ あれは宇宙人だ';
	$pattern = '/あれは.+だ/';
	$result = preg_match($pattern, $text, $matches);
	
	if($result){
		echo 'マッチしました';
	}else{
		echo 'マッチしませんでした';
	}
	
	var_dump($matches);
	

	// 表示結果
	マッチしました
	
	array(1) {
		[0]=> string(57) "あれは犬だ"
 	}
?>

考察

忘れないようにしたい。

最後までお読み下さり ありがとうございました。記事はここ迄です。

尚、本記事は作成から「3年以上」経過しています。

記事作成当時と現在の状況等により内容が適切でない場合があります。また、リンク切れが生じている場合もあります事を予めご了承下さい。

お気に入りに登録しますとお気に入り記事を一元管理でき、再度閲覧したい場合等 容易に記事を探し出す事ができますのでご活用下さい。

下段にはコメントを掲載しております。

広告バナー

コメント

頂いたコメントを下記に掲載しております。更に下部にはコメント投稿フォームを設けております。

注意事項を確認・了承した上、コメント投稿お願いいたします。

注意事項に該当するコメントにつきましては、事前告知なしに投稿したコメントの削除を行う場合があります。

予めご了承下さい。

  • 記事内容と無関係なコメント
  • 公序良俗に反するコメント
  • 個人情報や法令違反を含むコメント
  • その他、管理者が不適切と判断したコメント

現在 頂いているコメントはありません

返信先(コメント管理番号)コメントに対し返信する場合のみ
お名前・ハンドルネーム2~32文字内で入力下さい
メールアドレス公開される事はありません
電話番号半角数字+ハイフンで入力下さい
コメント全角500文字内で入力下さい