src/Peach/Util/Strings.php
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;
        }
    }
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;
        }
    }
指定された文字列の中で、"\" によるエスケープ処理のされていない文字列があらわれる
最初のインデックスを返します.
偶数個の "\" が続いた後に対象の文字列が出現した場合に、そのインデックスを返り値とします.
奇数個の "\" の後の文字については, その直前の "\" によってエスケープされているとみなして
スルーします. 以下に例を示します.

<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