[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как Котеров советует
Удвоение слеша в регулярном выра
Скажите почему Котеров пишет, что так не рекомендуется (он пишет - "Так же мы не можем(не рекомендуется писать)"):
$re = '/a\*b/';

а надо
$re2 = '/a\\*b/';


Если даже
print $re===$re2; // 1

выведет 1.

Ведь в php в строках заключенных в одинарную кавычку, слешем надо предварять только кавычку или другой слеш.
Так же получается грязнится текст регулярного выражения.
Guest
в смысле слешем предварять другой слеш только если второй идет в конце строки ('dfdfd \\'), а не каждый слеш.
$re = ' \  \  \  \ ';

- корректная строка, ничего не надо экранировать
DySprozin
ИМХО, тут просто вопрос читабельности (;

;;Так же получается грязнится текст регулярного выражения.
не совсем так (; у меня, например, сразу невольно возник вопрос "зачем экранировать звездочку" и только потом я обратил внимание на одинарную кавычку.

Далее. То, что ты привел - "лабораторный" пример. Регулярки нередко занимают целую строчку - их разбирать и так дело не слишком приятное. А спотыкаться каждый раз об "экранированную" звездочку, кавычку итд и держать в голове, что кавычка одинарная - дополнительное неудобство.

_____________
Господа! Я ненавижу выканье на форумах, обращайтесь ко мне на ты.
Господа! Я буду тоже тыкать, но если это так кого-то из вас коробит, пожалуйста, предупреждайте меня об этом
---
Можешь помочь — помоги, не можешь — попытайся, не хочешь — уйди.
koala
$re = '/a\*b/';
и
$re = '/a\\*b/';


Подставьте в функцию preg_match и посмотрите на результат. :) С наперед созданной под пример строкой в которой будете искать по рег. выражению.

P.S. Если подставлять переменную в функцию то PHP понимает "\\" как "\" а PCRE в свою очередь понимает "\\" как "\". По этому, если использовать переменную в качестве хранения рег. выражения а не сразу его прописать в качестве параметра для функции то рег. выражение типа "/a\\\\*b/" для PCRE через PHP будет "/a\*b/". Читайте внимательно книгу, там все описано :)

P.P.S.: Тоже в этой книге черпал некоторые знания :)

P.P.S.2: Почитайте про синдром "зубочистки".

_____________
Vi Veri Veniversum Vivus Vici
Guest
Цитата (DySprozin)
сразу невольно возник вопрос "зачем экранировать звездочку"

чтобы ее искать в строке
Цитата (koala)
Подставьте в функцию preg_match и посмотрите на результат. :)

подставил и посмотрел, результат одинаков
  $res = preg_match('/a\*b/s', 'a*b', $matches);     // выведет 1
$res = preg_match('/a\\*b/s', 'a*b', $matches); // выведет 1


Цитата (koala)
Читайте внимательно книгу, там все описано :)

Я и читаю. Но мне кажется он лажает. По сути он предлагает каждый слэш экранировать и в том числе тот что у \d:
  $res = preg_match('/\d/s', '3', $matches);     //выведет  1
$res = preg_match('/\\d/s', '3', $matches); //выведет 1

Глянул тут по форуму, никто так в ответах не делает. Все используют первый вариант.
inpost
Собственно ответа этого не знаю, использую первый вариант и пока ещё на ошибку не попадал, всегда поиск работал нормально. Видимо есть какие-то исключения, или раньше надо было так писать...

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
bestxp
вообще то в регулярке

\d != \\d . в первом случае у нас получается все числа, во втором случае у нас только 2 символа для поиска совпадения, это обратный слеш и d

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.