preg_matchとeregの引数に与えるパターンの書きかたについて質問させてください。
http://php.net/manual/ja/function.ereg.php
http://php.net/manual/ja/function.preg-match.php
それぞれ$patternに与える文字列に対して「/」で囲う囲わないの違いはあるのでしょうか?
preg_matchでは「/」で囲わないと必ず「マッチしない」を表す返却値が返ってきてしまうようなのですが。
eregではパターンを囲わない、preg_matchはパターンを「/」で囲うというのが使用方法なのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
ベストアンサー
そもそもeregは非推奨の関数で、最新版では削除されていますので
いまさら違いを覚える必要はないのでは?
pregはperl互換の正規表現で、互換性のため多くの言語で採用されている
スラッシュをデリミタに使う書式を基本としていますが、
パターンと競合しなければスラッシュ以外の適当な文字でも問題ありません
また逆にデリミタを書かないでパターンを指定するとエラーになります
投稿2017/10/18 06:23
総合スコア117605
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
リンク先にも記載がありますが、ereg
は現在非推奨または削除された関数ですので、使用されない方がよいかと思います。
preg_matchはPCREというPerl言語互換の正規表現を使用するため、正規表現のパターンにオプションを含めることができます。
例えば"/php/i"は大文字小文字を区別せず"php"を含む文字列にマッチします。
そのため、"/"で囲んでパターン文字列の範囲を明示する必要があります。
また、mb_ereg関数はマルチバイトをサポートするereg関数としてまだサポートが継続しているのではないかと思います。
PHP: mb_ereg - Manual
http://php.net/manual/ja/function.mb-ereg.php
投稿2017/10/18 06:28

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2017/10/21 03:17 編集

0
ereg/eregi/ereg_replace/eregi_replace/split/spliti
といった関数はPHP5.3.0で非推奨となり、 PHP7.0.0で削除されています。
php
1if (! function_exists('delimiter')) { 2 function delimiter($pattern, $modifiers = null) 3 { 4 if (isset($modifiers)) { 5 return '/' . $pattern . '/'. $modifiers; 6 } else { 7 return '/' . $pattern . '/'; 8 } 9 } 10}
というようなデリミタを追加する処理を書いておけばpreg_filter/preg_grep/preg_match/preg_match_all/preg_replace/preg_replace_callback/preg_replace_callback_array/preg_splitにパターン文字列を渡すことができます。
$pattern これはパターン文字列を表します。
$modifiers パターン修飾子を指定します。指定しない場合は渡す必要はありません。
以下のように渡せます。
php
1if (preg_match(delimiter('^([test]+)$'), 'test')) { 2 // 処理 3}
投稿2017/11/16 23:20
編集2017/11/16 23:22総合スコア178
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/21 02:03