メインコンテンツに移動
ホーム

古松

メインナビゲーション

  • ホーム
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • PHPで特定な配列キーを正規表現で取得します

PHPで特定な配列キーを正規表現で取得します

やりたいこと:配列にある特定なキーを割り出して値を取得します

  • 以下の配列を例とします
    $a = array(
        "key_0"   => "val 0",
        "key_1"   => "val one",
        "key_2"   => "val two",
        "key_3"   => "val three",
        "key_4"   => "val four",
        "key_5"   => "val five",
        "key_6"   => "val six"
    );
  • "kei_3"から"key_5"までの値を取得したいです

簡単な方法:ループ(例:foreach文)で配列キーに合うものをすべて取得します

  • シンプルな方法ではループ(例:foreach)で"kei_3"、"kei_4"、"kei_5"に合う値を取得します
    $a = array(
        "key_0"   => "val 0",
        "key_1"   => "val one",
        "key_2"   => "val two",
        "key_3"   => "val three",
        "key_4"   => "val four",
        "key_5"   => "val five",
        "key_6"   => "val six"
    );
    
    $out_arr = array();
    foreach($a as $k =>$var ) {
      if( $k == "key_3" || $k  == "key_4" || $k == "key_5" ) {
      $out_arr[$k] = $var ;
    }
    
  • もし、特定なキーが多い、また入力配列が多きい場合、この方法では不効率になります

正規表現で特定なキーをマッチングして、値を取得します

  • PHPの関数: array_filterを利用します
    $a = array(
        "key_0"   => "val 0",
        "key_1"   => "val one",
        "key_2"   => "val two",
        "key_3"   => "val three",
        "key_4"   => "val four",
        "key_5"   => "val five",
        "key_6"   => "val six"
    );
    
    $array_keys = array_keys($a);
    $matched_keys = array_filter(
        $array_keys,
        function($k){ return preg_match( "/key_[2-4]/u" , $k) ;}
                );
    
    foreach($matched_keys as $key){
        echo $a[$key]."\n" ;
    }
    

    array_filter関数と正規表現で特定な配列キーを取得します

  • array_filter関数の2番目の引数がコールバック関数なので、このコールバック関数に正規表現で特定なキーのマッチングを行っています

PHPの正規表現の改行(\n)識別に注意すること

問題点:PHPの正規表現で改行記号(\n)をうまく識別できない

  • 以下のPHPコード(preg_split)改行記号(\n)をうまく認識しない
    $split_arr = preg_split('/[  ;;,,、\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は以下のようで
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }
    
  • 改行記号:「\n」だけては正規表現が認識しない
    PHPの正規表現が改行記号「\n」をうまく認識しない

正規表現で改行を「\r\n」で認識すべきです

  • ASCII文字コードではOSより改行コードが違います
    • LF(改行、0x0A):主にUnix、Linuxで使用
    • CR (復帰、0x0D) :主にAppleのMaxOSで使用
    • CR+LF:主にWindowsで使用
  • 使用OSより、改行記号が違うため、すべての改行記号を対応する正規表現が必要となります
  • 改行記号:「\r\n」を利用すれば各OSに対応できます: preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str)

正規表現で特定な文字出現回数を限定して検索方法

やりたいこと:正規表現で特定な文字、出現回数限定されている行を検索

  • 例えば:空白文字:' '二つが入っている行(a little terror!)を割り出しタイです
    • Your son's a little terror! Can you control him?
    • a little terror!
    • little terror!

正規表現の否定(^)を利用して特定な文字を含めない単語を割り出し

  • 特定な文字を含めない単語を割り出して、そして特定な文字を真中に置き、このようなパターン回数を限定すればよいです
    • 正規表現の否定:[^ ] ← 空白を含めいない任意な文字
    • [^ ]+?  ← 空白を含めない単語(複数の文字)
    • [^ ]+? [^ ]+? ← 空白文字一つのみを含めている
    • ^[^ ]+? [^ ]+$  ← 空白文字一つのみを含めている行
  • 今回の例では二つの空白文字のみを含めるので、正規表現は以下のようです
    • ^[^ ]+? [^ ]+? [^ ]+$
      正規表現で特定な文字の出現回数限定される行の検索

 


検索フォーム

カテゴリ別

  • laravel
  • drupal
  • javascript
  • windows
  • html
  • mysql
  • php
  • apache
  • css
  • SEO
  • video
  • wordpress
  • linux
  • python
  • Electron
  • Visual Studio Code

google ads