メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

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

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

php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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
development
php

問題点: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)
php
php

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

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

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

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

 

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番目の引数がコールバック関数なので、このコールバック関数に正規表現で特定なキーのマッチングを行っています

ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)