メインコンテンツに移動

メインナビゲーション

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

パンくず

  • ホーム
  • PHPでの正規表現で日本語を識別時に文字化け現象

PHPでの正規表現で日本語を識別時に文字化け現象

php
development
php

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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

問題点:PHPの正規表現で日本語の識別時に文字化けが発生

  • 以下のPHPコードの正規表現(preg_split)で日本語文字列を分割する
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\n\t]+/i', ' ' . $str);
    
    var_dump($split_arr);
  • 実行結果は部分的に文字化けとなりました
    array(7) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(5) "午�"
      [3] =>
      string(2) "�"
      [4] =>
    "
      [5] =>
    "
      [6] =>
      string(6) "学習"
    }

    PHPの正規表現で日本語を識別する際にの文字化け

PHPの正規表示パターンに明確な文字コード指定が必要となります

  • PHPでの正規表現パターンに文字コード(例:UTF-8)の指定が必要(例:UTFの場合’u’で指定)
    $str = '午前 午後,昼;夜
    
    学習';
    
    $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', ' ' . $str);
    
    var_dump($split_arr);

    実行結果:
     

    array(6) {
      [0] =>
      string(0) ""
      [1] =>
      string(6) "午前"
      [2] =>
      string(6) "午後"
      [3] =>
      string(3) "昼"
      [4] =>
      string(3) "夜"
      [5] =>
      string(6) "学習"
    }
    

     

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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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
development

やりたいこと:PHPの正規表現で特定なキーワードが含まないimgタグのすべてを取得

  • HTML文字列は以下のよう
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG"><img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px"></a>
    <a href="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG"><img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px"></a>
    
  • 抽出したいimgタグ: 文字列”lightbox-show”が含まないすべてimgタグの内容
    • <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">
      <img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">
  • 抽出したくないimgタグ: 文字列”lightbox-show”が含まれるimgタグの内容
    • <img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">

imgタグのみを割り出す最短一致正規表現:"/<img(.+?)>/i"

  • imgタグのみを割り出す正規表現: "/<img(.+?)>/i"
    $pattern="/<img(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*   実行結果  */
    array(2) {
      [0] =>
      array(3) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
        [2] =>
        string(159) "<img alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px">"
      }
      [1] =>
      array(3) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
        [2] =>
        string(154) " alt="" class="lightbox-show" src="/sites/pine/files/field/image/drupal-display-suite-code-field-list.PNG" style="height:216px; width:640px""
      }
    }
    

     

  • 注意点:最短一致の正規表現 (.+?) の利用
    • img終了タグ後にいろいろな別のタグがあるため、imgタグを限定にする場合、開始タグから終了まで(<img … >)の部分を最短一致表示の使用
    • ちなみに、最長マーチ表現は (.*) のようです

特定のキーワード(lighbox-show)が含まないimgタグを割り出す正規表現:"/<img(?!.*\"lighbox-show\")(.+?)>/i"

  • 複数のimgタグに特定なキーワード(lightbox-show)が含まない表現は:"/<img(?!.*\"lighbox-show\")(.+?)>/i"
    $pattern="/<img(?!.*\"lightbox-show\")(.+?)>/i";
    preg_match_all( $pattern, $html_str, $matches ) ;
    var_dump($matches);
    
    /*  実行結果  */
    array(2) {
      [0] =>
      array(2) {
        [0] =>
        string(132) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px">"
        [1] =>
        string(142) "<img alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px">"
      }
      [1] =>
      array(2) {
        [0] =>
        string(127) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field.PNG" style="height:153px; width:640px""
        [1] =>
        string(137) " alt="" src="/sites/pine/files/field/image/drupal-display-suite-code-field-use-token.PNG" style="height:390px; width:540px""
      }
    }

  • 注意点:含まない表現 ”(?!.*キーワード)” の利用

 

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

php
development
php

やりたいこと:PHPの正規表現で文書にある改行(\n)記号をHTMLタグ(<br>)に変換

  • 環境:PHP5.6
  • Windows上でテキストエディターに認識される改行記号(\n)が入っている文書
    • 文字列1\n文字列2  <- 「文字列1」と「文字列2」の間に改行記号(\n)があります
  • PHPの正規表現でこの改行記号(\n)をHTMLタグ(<br>)に変換します
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    • ここで正規表現のパターン: "/\\n/" で改行記号(\n)を認識します

問題点:文字列を シングルクォーテーション で囲んでpreg_replaceに渡すと違う結果になります

  • 同じ上記の例で文字列をシングルクォーテーションで囲みます
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    • 結果は何も変わってないです(変換されませんでした)

文字列を シングルクォーテーション で囲んでいる場合に正規表現のパターンは四つのバックスラッシュ("/\\\\n/")が必要となります

  • 上記例でうまく動作させるには正規表現のパタンに四つのバックスラッシュ("/\\\\n/")が必要となります
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    
  • ちなみに、シングルクォーテーション/ダブルクォーテーションで囲んでいた文字列とそれぞくのマッチパタンを以下のよう
    PHPの正規表現置換(preg_replace)にシングルクォーテーション/ダブルクォーテーションで囲んだ文字列の違い
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    $str = "文字列1\n文字列2";
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1
    //        文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\n/u","<br>", $str );
    // 結果➡  文字列1\n文字列2
    
    $str = '文字列1\n文字列2';
    echo preg_replace( "/\\\\n/u","<br>", $str );
    // 結果➡  文字列1<br>文字列2
    

PHPで文字列を扱うときにシングルクォーテーション/ダブルクォーテーションの統一が必要となります

  • シングルクォーテーション/ダブルクォーテーションを手軽に使うことができますが、気を付けないと大きな問題になります
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)
ホーム

古松

検索

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)