前提
PHPで末尾の文字列が一致していることを判定したいです。
調べるとsubstr
とpreg_match
があったのですが、前者は文字数の指定が必要なようなので、現状はpreg_match
を使った方向で考えを進めています。
実現したいこと
文字列$str = 'user_arr';
などを与えて、
末尾が$end = '_arr';
であることを判定する関数を作りたいです。
ただし、関数の引数($end
)には正規表現を用いたくありません。
発生している問題
デリミタと同じ文字列を含む場合の判定ができません。
該当のソースコード
まず最初は以下でできると思いました。
php
$str = 'user_arr'; $end = '_arr'; var_dump( is_match_end( $str, $end ) ); function is_match_end( $str, $end ){ return preg_match("/{$end}$/", $str) === 1; }
しかし次のようなときに対応できないと分かりました。
php
$str = 'user/arr'; $end = '/arr'; var_dump( is_match_end( $str, $end ) ); function is_match_end( $str, $end ){ return preg_match("/{$end}$/", $str) === 1; }
試したこと
$end
に正規表現を用いると解決したので、先に申し上げたように問題点はデリミタにあるのだろうと考えています。
php
$str = 'user/arr'; $end = '|/arr$|'; var_dump( is_match_end( $str, $end ) ); function is_match_end( $str, $end ){ return preg_match($end, $str) === 1; }
しかし、引数$end
には正規表現を用いたくないのです。
補足情報
PHP7.2になります。
尚、preg_match
を用いない全く別の方向でもご回答を募集しておりますので、もしございましたらそちらもよろしくお願い致します。
まだ回答がついていません
会員登録して回答してみよう