Как я могу разделить строку один за другим, но игнорировать экранированный символ? Вот мой пример, у меня строка:
\ntest\rtest\n
Я хочу, чтобы это было так:
Array ( [0] => \n [1] => t [2] => e [3] => s [4] => t [5] => \r [6] => t [7] => e [8] => s [9] => t [10] => \n )
Кто-то сказал использовать preg_split, но я мало знаю о регулярном выражении.
Обратные косые черты требуют ускорения в RegEx.
Когда вы ссылаетесь на одну действительную обратную косую черту, вам понадобится серия из трех \\\
Соответствие RegEx
preg_match_all("/\\\?[^\\\]/", $str, $matches);
Демо-код Live: http://codepad.viper-7.com/FLjH9A
RegEx split – только для образовательных целей, поскольку совпадение в этом случае более уместно
$matches=preg_split("/(?<=\\\[^\\\])(?!$)|(?<=[^\\\])(?!$)/", $str);
Демо-код: http://codepad.viper-7.com/yrbtMV
Сначала вы можете удалить экранированные символы, а затем применить str_split()
:
$str = "\ntest\rtest\n"; print_r(str_split(strtr($str, array( '\r' => '', '\n' => '', ))));
если вы хотите получить массив, вы можете прочитать строку с символом char by one. независимо от регулярного выражения.
Если вы хотите сопоставить каждый отдельный символ (необязательно предшествующий a \
), вы можете использовать:
$str = '\ntest\rtest\n'; preg_match_all('/\\\?[a-zA-Z]/', $str, $matches);
Который возвращал массив с одиночными и экранированными символьными последовательностями.