【正規表現】SERVER_NAMEについての意味と機能
- 【正規表現】SERVER_NAMEとは何か?意味や使い方を解説します
- 正規表現の意味とは?SERVER_NAMEの機能とは何か?詳しく解説します
- SERVER_NAMEと正規表現の関係や使い方について詳しく解説します
- ベストアンサー
['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\.#'を'.'へ置き換え <知りたいこと> 正規表現の所の意味と、結局、この一文で何をしようとしている(と予想される)か、教えてください
- re999
- お礼率61% (476/777)
- PHP
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
正規表現の意味は、 # perl互換の場合、 / の代わりに、パターン括りに # を使える ^ 先頭 (?:[a-z0-9\-]+\.) ()で、ひとまとめのサブパターン ? は複数の意味がありますが、手前が開始用丸括弧で、後方に : が続くので、「値のキャプチャをしないサブパターン」でしょう。 [a-z0-9\-] a-z または 0-9 または '-'文字 のいずれか1文字 + 手前の文字種が1文字以上 \. '.'文字 (?:[a-z0-9\-]+\.){1,} () 内のパターンが一回以上あること、キャプチャしないことにより、実行時間を少々早くしている。 [a-z]{2,} a-z のいずれかの文字が 2個以上 $ 終端 i パターン修飾子: ##で括られたパターンの中の文字は 大文字にも小文字にもマッチ よって、 a-z または 0-9 または '-' のいずれかの文字が1文字以上に '.'文字の続くパターンが一つ以上有って、最後に 2文字以上のアルファベットが続くものにマッチ 利用目的:実行serverアプリによっては、localhost アクセスだとドメイン名を含まないことがあるけど(windowsだとコンピューター名が入っていたりする)、きちんとドメイン名が付いてる(間に '.' が入っている)ときに、さらに次のreplaceを実行する。 前後関係が不明だけど、予想としては、apache でvirtual host 実行時に www.host名 で、default hostにアクセスするけど、このときに別のvirtual host名に切り替えてリンクを作成しようとしてるってとこでしょうか。 正規表現の詳細は以下を参照してください http://jp.php.net/manual/ja/reference.pcre.pattern.syntax.php
関連するQ&A
- 文字列全体に対する置き換え [正規表現]
正規表現での文字列全体に対する、マッチ箇所 への置き換えについて、アドバイスをもらえないでしょうか。 parlでいうg修飾子はphpには無く、 例えば、[preg_match]は[preg_match_all]という関数で対応出来ますが、 置き換えを行う[preg_replace]には[preg_replace_all]がありません。 それに類する関数も無いように思います。 これに関して、PHPではどのように対応すれば良いのでしょうか。
- ベストアンサー
- PHP
- 正規表現について教えて下さい
正規表現について教えて下さい $string = "LibrayMyUtil2File AppFile"; $pattern = '/([A-Z][a-z0-9]*)*([A-Z][a-z0-9]*)File/'; $replacement = '$2'; echo preg_replace($pattern, $replacement, $string);//Util2 App と表示される この例のように、「File」の前の単語に置き換えたいのですが、 このやり方だとpatternの「[A-Z][a-z0-9]*」が重複しているのが凡長だと思ってまして もっと短縮された書き方があれば教えてもらいたいです。
- ベストアンサー
- PHP
- 正規表現preg_match('#^(?:[a-z
preg_match('#^(?:[a-z0-9\-]+\.){1,}[a-z]{2,}$#i', $hoge)の意味を教えて ・#iなので、デリミタは#。大文字小文字は無視 ・先頭に、【「:(英数字ハイフンが1回以上).」が、0回または1回の出現】が1回以上の繰り返し ・続いて、英字が2回以上の繰り返し と思い、 :123a-.ss てやってみたのですが、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
- http://とhttps://のどちらでもマッチングできる正規表現
http://とhttps://のどちらでもマッチングできる正規表現の書き方が分かりません。aタグの中のhref="のあとのURL部分にhttpでもhttpsのどちらでもOKのマッチングをかけたいです。 具体的にはhttp://www.aaa.co.jpでもhttps://www.aaa.co.jpのどちらでもpreg_match_allでマッチングをかけたいです。 $count=preg_match_all("正規表現",$URL,$maches); という感じでhttpかhttpsのURLに引っ掛けたいです。 教えてください
- ベストアンサー
- PHP
- preg_replaceでの正規表現について
お世話になります。 ereg_replace で書いた正規表現による置換処理を、 preg_replace に置き換えようとしています。 (preg_replaceの方が処理が速いとマニュアルにあったので) ところが、preg_replaceでの正規表現検索がうまくいかないで困っています。 基本的には、ereg_replaceの正規表現部分を//で囲んでいるだけです。 具体的には、下記のような処理を書いています。 間違いがあれば、ご指摘いただけましたら幸いです。 //### うまくいっている ereg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='\{dokuji tag\}.+\{_dokuji tag\}'; $replace=''; $html=ereg_replace($search,$replace,$html); //不要部分の削除 //### うまくいっている ereg_replace のパターン ここまで ### ↓ //### うまくいかない preg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='/\{dokuji tag\}.+\{_dokuji tag\}/m'; $replace=''; $html=preg_replace($search,$replace,$html); //不要部分の削除 //### うまくいかない preg_replace のパターン ここまで ### //### 置き換えるソース('template/temple.html') ここから ### <!-- {dokuji tag} --> <tr> <td nowrap><strong>タイトル:</strong></td> <td> <input type="text" name="name" size="80" value="{name}" /> </td> </tr> <!-- {_dokuji tag} --> //### 置き換えるソース('template/temple.html') ここまで ### よろしくお願い申し上げます。
- ベストアンサー
- PHP
- 正規表現 許可文字列 かつ 指定連続文字列の排除
わかりにくいタイトルで恐縮です。 初歩的な問題かもしれませんが、もう何日も悩み続けており、ヒントでもいただけると助かります。 たとえば、 正規表現にて 英字のみ(1文字以上) という場合は preg_match("/[a-z]+/i",$string) という風にすればいいと思います。 ここで、英字のみ(1文字以上) しかし、abc という連続文字列があれば該当させない、という場合どういう正規表現を作ればいいのでしょうか? preg_match("/[a-z^(abc)]+/i",$string) みたいなヘンテコなものを作ってみたりしてみたのですが、文法違いなのか、やはり正常には動いてくれません。 ([^a][^b][^c]) なんていうのも違いますし。 狙いは、文字列の最初でも最後でも途中でも、指定文字以外や指定連続文字列がある場合は、エラーを出す、というようなものにしたいのです。 なにかヒントいただければと思います。
- ベストアンサー
- PHP
お礼
回答ありがとうございました。 丁寧に解説していただき、大変参考になりましたー