preg_split от обратной косой черты
В моем PHP-коде у меня есть имя класса с пространством имен, назначенным в строке, например:
$my_class_name; // = "Aaa\Bbb\Ccc"; // this is not in source code, just var dump
Мне нужно только второе имя, "Bbb" в моем случае. Я пытался использовать это:
$result_array = preg_split("/\\/", $my_class_name);
Однако это не работает. Мне нужно использовать тройной обратный слеш в регулярном выражении "/\\\/"
чтобы это работало. Мой вопрос: зачем мне три из них? Я всегда избегал специальной функции с обратной косой чертой, удваивая ее.
4 ответа
Вы хотите иметь буквальную обратную косую черту в своем регулярном выражении, поэтому вы должны избежать этого. Но затем вы также хотите поместить его в строку PHP, что означает, что вы должны снова его избежать.
Последовательность \\\/
разбивается на
\\
(один буквенный символ обратной косой черты) и\/
(обратная косая черта, за которой следует косая черта; согласно правилам экранирования строки PHP, это недопустимая escape-последовательность и поэтому распознается как литералы пары или символа\/
)
Четыре обратные косые черты также будут преобразованы в два символа обратной косой черты, указав шаблон как строковый литерал "/\\\\/"
эквивалентно указанию его как "/\\\/"
,
Но почему вы используете preg_split
вместо explode('\\', $my_class_name)
?
$str = "aa\\bb\\cc";
print_r(preg_split("/\\\\/", $str));
выходы:
Array
(
[0] => aa
[1] => bb
[2] => cc
)
Это немного странно, но вы должны избежать побегов, так как регулярное выражение анализируется дважды...
пытаться:
$result_array = preg_split("/\\\\/", $my_class_name);
Я думаю, потому что вам нужно один раз сбежать для строки и один для механизма регулярных выражений