• ベストアンサー

正規表現の意味を教えてください

function underscore($camelCasedWord) { return strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $camelCasedWord)); }

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

補足 リプレース先の指定の\\1のPHPの解釈は $1の意味でした。よって  \wA => \w_A  \wB => \w_B と置換されますね。

likewind
質問者

お礼

やっとわかりました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

逆のような気がする>#2. camelCasedWord → (置換で) camel_Cased_Word → (strtolower で) camel_cased_word ではないかと.

likewind
質問者

補足

AaaBbbをaaa_bbbに変換する関数ですね

全文を見る
すると、全ての回答が全文表示されます。
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

ちがいますね $camelCasedWord とあるからカメライズですね ハイフン+小文字アルファベットを大文字アルファベットに直すやつですかね

likewind
質問者

補足

AaaBbbをaaa_bbbに変換する関数ですね でも正規表現(?<=\\w)([A-Z])の意味がわかりません

全文を見る
すると、全ての回答が全文表示されます。
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

パターンを分解すると ?<= 肯定の戻り読み \w 英数字の単語 \\w \wをエスケープしてるから単なる\wという文字(?)    ※それとも「?<=\」で何か意味があったかも [A-Z] A-Zの文字 よって、\wの後ろのA-Zが続く文字を_\\1にリプレースする  \wA => \w_\\1  \wB => \w_\\1 ちがうかな?

likewind
質問者

補足

(?<=\\w)([A-Z]) の場合 underscore("AaaBbb")=>aaa_bbb (?=\\w)([A-Z]) の場合 underscore("AaaBbb")=>_aaa_bbb この < はどうな役割してるのはわかりません

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 正規表現について

    電話番号の正規表現について質問です。 $value = '000-111-2222'; これだけだと通りますが function tel( $value ) { return !preg_match( '/^\d{2,3}\-\d{3,4}\-\d{4}$/', $value ); } 市外局番がなくても通るようにしたくこのようにしましたがはじかれます^^; function tel( $value ) { return !preg_match( '/^\d{2,3}\-\d{3,4}\-\d{4}$ | ^\d{2,4}\-\d{3,4}$/', $value ); } いずれのケースにも当てはまらないのではじくようにしたいのですが、実現するにはどう書けばいいのでしょうか?

    • ベストアンサー
    • PHP
  • 正規表現について

    PIDを”123-456-789-999”といった感じに”3文字+3文字+3文字+3文字” でないと送信できないようにしたいです、それ以外ははねる。今のままだと”1-1-1-1”とか”123-45-1111-111”送信できてしまいます。 教えてください。よろしくおねがいします。 'PID', '\w[0-9a-z]\w[0-9a-z]\w[0-9a-z]-\w[0-9a-z]\w[0-9a-z]\w[0-9a-z]-\w[0-9a-z]\w[0-9a-z]\w[0-9a-z]-\w[0-9a-z]\w[0-9a-z]\w[0-9a-z]',

    • ベストアンサー
    • CGI
  • 正規表現について教えて下さい

    正規表現について教えて下さい $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
  • 正規表現について

    お世話になります。 いろいろ調べてテストもしたのですが、 どうしてもわからないのでヒントをください。 やりたいことは、PHPでパスワードチェックを したいのです。 a-z A-Z 0-9 _- 以外の文字が入ったらエラーを返したい のですが、方法がわかりません。 そもそもpreg_matchをつかうのか、eregを使うのか・・・ どうか、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現の読み方

    /{(.+?)}/e この正規表現はどのような意味でしょうか? 下記のようなプログラム(テンプレートエンジン)に使われています display('index.html', $prm); function display($tpl, $prm) { $html = file_get_contents($tpl); $html = preg_replace('/{(.+?)}/e', '$prm[\'$1\']', $html); echo $html; }

    • ベストアンサー
    • 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
  • 正規表現[a-z0-9\-\.]* の意味を教えて

    [a-z0-9\-\.]* の意味を教えてください。 preg_matchで確かめてみようと思ったのですが、 よく分かりませんでした。 「半角英小文字」か「数字」か「ハイフン」か「ドット」だと思ったのですが、 「半角英大文字」でも、「""」でも「空白」でも「日本語」でも、1が返ってきました。 「*」を調べたら、「直前の表現の0回以上の繰り返しにマッチ」て書いてあったのですが、 「0回以上」の意味が分かりません。 「すべてに当てはまる」ということなのでしょうか?

    • ベストアンサー
    • PHP
  • PHPでメールチェックをしたいのですが、空欄だとエラーが返されてしまいます。

    必須項目ではないので、何か入力されたときのみメールチェックをしたいのですが、 function isMailError ( $mail ) { if($mail==null) { return true; } if ( !preg_match( '/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mail ) ){ return true; } else { return false; } } この設定ではうまくいきません。なぜでしょうか? ご指導よろしくお願い致します。

    • 締切済み
    • 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
  • Perlと似た正規表現

    preg_replaceでは最初の引数をPerlのように[0x81-0x9F]のように指定できないんですか?

    • ベストアンサー
    • PHP