@P747

Регулярные выражения — совпадение только на один обратный слеш?

Добрый день!

Как правильно составить регулярное выражение, чтобы совпадение было только на один обратный слеш?
$str = 'v\a';
var_dump(preg_match("/^(v\\\\a)$/", $str, $matches)); //true

$str2 = 'v\\a';
var_dump(preg_match("/^(v\\\\a)$/", $str2, $matches)); //true - должно false
  • Вопрос задан
  • 84 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У вас $str и $str2 содержат одинаковые строки
$str = 'v\a';
var_dump($str);
// string(3) "v\a"

$str2 = 'v\\a';
var_dump($str2);
// string(3) "v\a"
Ответ написан
Lyrium
@Lyrium
Web developer
В регулярном выражении обратный слеш экранирует спецсимволы. Т.е. во втором варианте вы экранировали слеш слешем. Чтобы было правильно нужно использовать еще один слеш.

$str = 'v\a';
var_dump(preg_match("/^(v\\\\a)$/", $str, $matches));  // true

$str2 = 'v\\\a';
var_dump(preg_match("/^(v\\\\a)$/", $str2, $matches));  // false
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы