code: public static function getRawIndex($text, $chr)
      {
          $chr     = str_replace("\\", "\\\\", $chr);
          $pattern = "/(?<!\\\\)(?:\\\\\\\\)*(" . $chr . ".*)$/";
          $result  = array();
          preg_match($pattern, $text, $result);
          if (count($result)) {
              return strlen($text) - strlen($result[1]);
          } else {
              return false;
          }
      }
docs: 指定された文字列の中で、"\" によるエスケープ処理のされていない文字列があらわれる
  最初のインデックスを返します.
  偶数個の "\" が続いた後に対象の文字列が出現した場合に、そのインデックスを返り値とします.
  奇数個の "\" の後の文字については, その直前の "\" によってエスケープされているとみなして
  スルーします. 以下に例を示します.
  
  <pre>
  getRawIndex("AB=CD=EF", "=")     => 2
  getRawIndex("AB\\=CD=EF", "=")   => 6
  getRawIndex("AB\\\\=CD=EF", "=") => 4
  </pre>
  
  インデックスが存在しない場合は FALSE を返します.
  
  @param  string $text 検索文字列
  @param  string $chr  検索対象の文字
  @return int          インデックス. ただし存在しない場合は FALSE