- ベストアンサー
正規表現preg_match('#^(?:[a-z
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
次のコードを実行してみてください。 <?php $hoge='123a-.sx'; print '<pre>'; if(preg_match('/^([a-z0-9\-]+\.){1,}([a-z]{2,})$/i', $hoge, $match)){print_r($match);}else{print "NoMach\n";} if(preg_match('/^(?:[a-z0-9\-]+\.){1,}([a-z]{2,})$/i', $hoge, $match)){print_r($match);}else{print "NoMach\n";} if(preg_match('/^([a-z0-9\-]+\.){1,}(?:[a-z]{2,})$/i', $hoge, $match)){print_r($match);}else{print "NoMach\n";} if(preg_match('/^(?:[a-z0-9\-]+\.){1,}(?:[a-z]{2,})$/i', $hoge, $match)){print_r($match);}else{print "NoMach\n";} if(preg_match('/^(:[a-z0-9\-]+\.){1,}([a-z]{2,})$/i', $hoge, $match)){print_r($match);}else{print "NoMach\n";} (?:PATTERN) は、基本的には(PATTERN)と同じですが、後方参照を作らないってことです。
その他の回答 (1)
- himajin100000
- ベストアンサー率54% (1660/3060)
失敗ケースを示すのに難航。説明って難しいなぁ… http://ideone.com/s9uc3
お礼
回答ありがとうございました。 >括弧を使うと、グループにできる >(?: )の構文を使うと、そのような割り当てから外れる …知りませんでした。 「おまけ」のコメント、リンク先も、大変勉強になりましたー
関連するQ&A
- 正規表現[a-z0-9\-\.]* の意味を教えて
[a-z0-9\-\.]* の意味を教えてください。 preg_matchで確かめてみようと思ったのですが、 よく分かりませんでした。 「半角英小文字」か「数字」か「ハイフン」か「ドット」だと思ったのですが、 「半角英大文字」でも、「""」でも「空白」でも「日本語」でも、1が返ってきました。 「*」を調べたら、「直前の表現の0回以上の繰り返しにマッチ」て書いてあったのですが、 「0回以上」の意味が分かりません。 「すべてに当てはまる」ということなのでしょうか?
- ベストアンサー
- PHP
- 正規表現preg_replace("/[a-z0-
「*」を調べたら、「直前の表現の0回以上の繰り返しにマッチ」て書いてあったのですが、 「0回以上」の意味が良く分かりません。 例えば、 preg_replace("/[a-z0-9\-\.]/", "○", "ABCabcXYZxyz");の実行結果が、 「ABC○○○XYZ○○○」となるのは分かるのですが、 preg_replace("/[a-z0-9\-\.]*/", "○", "ABCabcXYZxyz");の実行結果は、 どうして、「○A○B○C○○X○Y○Z○○」になるのでしょうか?
- ベストアンサー
- PHP
- 正規表現パターン'/^[a-z0-9]+$/iD' の最後の"D"について
こんにちは。今PHPの勉強をしているものです。 勉強中、ctype_alnum()という関数がわからなかったのでPHPマニュアルで調べたら、「この関数は preg_match('/^[a-z0-9]+$/iD', $text) と等価です。」と書いてありましたが、英字または 数字であるかどうかを調べるのなら、パターンは'/^[a-z0-9]+$/i'だけでいいと思いますが、最後のDはいったいなんなのでしょうか?修飾子で調べて見ましたがDなどといったものは見当たりませんでした。どなたか教えていただけませんか。
- ベストアンサー
- PHP
- PHPの正規表現「preg_match」で漢字を含む場合のマッチパター
PHPの正規表現「preg_match」で漢字を含む場合のマッチパターンについて 宜しくお願い致します。 preg_matchを使っての正規表現で、「あいうえおかきくけこ3月10日さしすせそ」という文字列から「3月10日」だけを抽出するには、どういうパターンが良いのでしょうか? 下記の様にやってみましたが、だめでした。。。 preg_match("/\d{1,2}[月]\d{1,2}[日]/",$hoge,$match) これではうまくいきません。 どなたかお助けくださいー!
- ベストアンサー
- PHP
- 正規表現 許可文字列 かつ 指定連続文字列の排除
わかりにくいタイトルで恐縮です。 初歩的な問題かもしれませんが、もう何日も悩み続けており、ヒントでもいただけると助かります。 たとえば、 正規表現にて 英字のみ(1文字以上) という場合は preg_match("/[a-z]+/i",$string) という風にすればいいと思います。 ここで、英字のみ(1文字以上) しかし、abc という連続文字列があれば該当させない、という場合どういう正規表現を作ればいいのでしょうか? preg_match("/[a-z^(abc)]+/i",$string) みたいなヘンテコなものを作ってみたりしてみたのですが、文法違いなのか、やはり正常には動いてくれません。 ([^a][^b][^c]) なんていうのも違いますし。 狙いは、文字列の最初でも最後でも途中でも、指定文字以外や指定連続文字列がある場合は、エラーを出す、というようなものにしたいのです。 なにかヒントいただければと思います。
- ベストアンサー
- PHP
- ['SERVER_NAME']と正規表現について
下記の意味が分かりません。 ( !empty($_SERVER['SERVER_NAME']) && preg_match('#^(?:[a-z0-9\-]+\.){1,}[a-z]{2,}$#i', $_SERVER['SERVER_NAME']) ) ? preg_replace('#^www\.#', '.', $_SERVER['SERVER_NAME']) : ''; <分かる範囲> $_SERVER['SERVER_NAME']が空ではなく、かつ、$_SERVER['SERVER_NAME']の中に'#^(?:[a-z0-9\-]+\.){1,}[a-z]{2,}$#i'があったら、$_SERVER['SERVER_NAME']の中の'#^www\.#'を'.'へ置き換え <知りたいこと> 正規表現の所の意味と、結局、この一文で何をしようとしている(と予想される)か、教えてください
- ベストアンサー
- PHP
- 正規表現preg_matchでincrement?
foreach($data as $key=>$val) { if(preg_match("/^increment\((\-?\d+)\)$/i",$val,$m)) $q.= "`$key` = `$key` + $m[1], "; ・上記のようなif文があるのですが、どういう意味でしょうか? ・incrementはカウントアップ? ・$valに「-1」…「-9」文字列があれば、$m[1]として利用? ・iがあるので、その際、大小文字の違いを無視?
- ベストアンサー
- PHP
お礼
回答ありがとうございました。 質問自体の疑問を解決できただけでなく、preg_matchの第3引数の使い方も学べたので、大変参考になりました。 どこで参照できるか目で見て確認できるので、この引数は、とても便利だなと思いました。 これから活用していきたいと思いますー