nastya97core
@nastya97core
Начинающий программист

Почему regex101 и php возвращают разный результат?

Здравствуйте. У меня есть строка и мне нужно получить всё то, что находится после первого \n (это не перенос строки, а именно слеш и бука n). Я делаю вот так
https://regex101.com/r/zZoGvw/1
но когда я перевожу это в php, у меня почему-то достаётся только телефон, а дальше - нет.
$z = "Запрос на доступ\nТелефон: 79991457764\nДанные: Останкин Ostoonekeen";
preg_match("/(?<=\\n).*/", $z, $user_info);
p($user_info);
/*Array
(
    [0] => Телефон: 79991457764
)*/


Вопрос
1. Что я делаю не так?
2. Как мне достать из моей строки Телефон: 79991457764\nДанные: Останкин Ostoonekeen?
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
nastya97core
@nastya97core Автор вопроса
Начинающий программист
explode("\n", $z, 2)[1]
либо регулярка:
preg_match("/(?<=\n).*/s", $z, $user_info);
но она медленнее
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@galaxy
Потому что у вас и строки разные, и выражения.
В PHP парсер строк обрабатывает обратный слеш:
$z = "Запрос на доступ\nТелефон: 79991457764\nДанные: Останкин Ostoonekeen";
$r = "/(?<=\\n).*/";
var_dump($z);
var_dump($r);

/*
string(101) "Запрос на доступ
Телефон: 79991457764
Данные: Останкин Ostoonekeen"
string(11) "/(?<=\n).*/"
*/


На regex01 такой обработки нет и \n - это именно слеш и буква n.

Используйте одинарные кавычки для таких строк (или удваивайте количество слешей).
Ответ написан
@mletov
Просто разбейте строку по \n, а потом получившийся массив соедините обратно в строку, только без первого(нулевого) элемента

https://stackoverflow.com/questions/1483497/how-ca...

https://www.php.net/manual/en/function.implode.php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы