Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2011, 21:48   #11
Gen_r_questions
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 81
По умолчанию

Не могу понять, зачем нужны последние 2 бекслеша
Нашел это
Здесь требуется двойное экранирование. Первый раз для самого регулярного выражения, чтобы заэкранировать служебный символ \ и второй раз, чтобы засунуть два бекслеша в строковый литерал PHP
$str='\j';
if(ereg("^\\\\j$",$str))


по этой логике, тогда и здесь нужно еще 2 бекслеша ставить, т.е получается чтобы было true должно быть так:
$str='*j';
if(ereg("^\\*\j$",$str))

Зачем такие заморочки сделали, сделали бы просто чтобы было true, в примере ниже, нужно было бы в ereg поставить 2-ые бекслэши и все
$str='\j';
if(ereg("^\\j$",$str))

Последний раз редактировалось Gen_r_questions; 22.04.2011 в 21:56.
Gen_r_questions вне форума Ответить с цитированием
Старый 22.04.2011, 22:07   #12
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Gen_r_questions Посмотреть сообщение
Не могу понять, зачем нужны последние 2 бекслеша
Из приведенной ранее ссылки:
Цитата:
'\\\\+' - это не "2 слеша или больше", это "1 или больше".

Сначала слеши "раскрываются" при раскрытии кавычек вокруг строки. Второй раз - при анализе регулярного выражения, где одиночный бэкслеш - тоже спецсимвол.
Цитата:
по этой логике, тогда и здесь нужно еще 2 бекслеша ставить, т.е получается чтобы было true должно быть так:
$str='*j';
if(ereg("^\\*\j$",$str))
Нет - в этом случае достаточно одного бэкслэша - читать почему.
Цитата:
Зачем такие заморочки сделали, сделали бы просто чтобы было true, в примере ниже, нужно было бы в ereg поставить 2-ые бекслэши и все
$str='\j';
if(ereg("^\\j$",$str))
Вопрос, надо понимать, риторический - ибо не по адресу...
Бэкслэш - важный спецсимвол в regexp, потому и обращение с ним не простое - наверняка тому были причины у разработчиков.
Andkorol вне форума Ответить с цитированием
Старый 22.04.2011, 22:29   #13
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Вычитал ещё такой вариант в этой статье:
PHP код:
$str='\j';
if(
ereg("^[\\]j$",$str)) 
- если вам так хочется просто двойной бэкслэш...

Там же, кстати, описывается, почему нужно 4-ре бэкслэша:
Цитата:
In this example we had to use 4 backslashes "\\\\" in the regular expression to denote just 1 backslash. This is because every backslash in a C-like string must be escaped by one more backslash. So we get 2 backslashes instead of 1. But each backslash in a regular expression must be escaped by another backslash too. So we get 4 backslashes.
Andkorol вне форума Ответить с цитированием
Старый 23.04.2011, 03:44   #14
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Автор, завтра, когда хостер обновит версию PHP и твой ereg() перестанет работать вообще, ты куда побежишь? А куда побежит заказчик? А нормальным программистам потом разгребать вот этот мусор весь.

Если честно, так умиляют господа поддерживающие новичков в их стремлении использовать неправильные подходы и устаревшие функции. Браво! Вам бы Лады Калины продавать....

Извините, накипело..
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 23.04.2011, 15:34   #15
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Johnatan Посмотреть сообщение
Если честно, так умиляют господа поддерживающие новичков в их стремлении использовать неправильные подходы и устаревшие функции. Браво! Вам бы Лады Калины продавать....
Если это в мой огород - то я несколько раз указывал на это ТС - заставить, увы, не могу...

Если не в мой - тогда о чём здесь вообще...?

Или предлагаете всем игнорировать подобные темы, в которых затронуто использование deprecated-функций..?

Цитата:
Извините, накипело..
Да лучше бы по сабжу что-нибудь...
Andkorol вне форума Ответить с цитированием
Старый 25.04.2011, 11:56   #16
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Johnatan
Вы тему то читали с самого начала ?
Автора два раза предупреждали. Не хочет - его проблемы.
ssdm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
регулярные выражения Dimarik PHP 10 09.12.2010 21:19
регулярные выражения Namolem Общие вопросы по Java, Java SE, Kotlin 0 03.05.2010 08:08
Регулярные выражения ACE Valery PHP 5 14.10.2009 11:37
регулярные выражения wyvern PHP 3 09.04.2009 22:15
Регулярные выражения Adamant Общие вопросы C/C++ 1 26.11.2007 19:44