Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите перевести регулярное выражение 
:(
    Опции темы
barcelona
Дата 8.7.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



Здравствуйте!
От предшественника досталось следующее:
Код

$format    = preg_replace('/(?<!\\\)М/', $m2, $format);

Всё бы ничего, да что из себя представляет '/(?<!\\\)М/', я не понимаю. Помогите пожалуйста.

PM MAIL   Вверх
SamDark
Дата 8.7.2008, 18:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 4
Всего: 38



Код

(?<!\\\) — перед «M» обязательно должен быть «\», чтобы было совпадение с «M» (негативная ретроспективная проверка)
М — буква «M»



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
smartov
Дата 8.7.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 4
Всего: 259



Походу, заменяет переносы строк? 
PM MAIL   Вверх
SamDark
Дата 8.7.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 4
Всего: 38



smartov, 
Не похоже. Для чего она я не знаю, но совпадёт с:

Код

la-la-la\Mla-la-la


и не совпадёт с 

Код

la-la-laMla-la-la


при этом в первом случае глобально сохранится «M» без «\».


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Feldmarschall
Дата 8.7.2008, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



А три слеша - это perl-style optimisarion, типа, и трех достаточно вместо канонических четырех?
PM   Вверх
barcelona
Дата 9.7.2008, 09:50 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



Это выражение находит букву М в такой строчке:  'j М Y го\да' и не находит, если перед М стоит от 1 знака "\".
И всё-таки мне непонятно, как это выражение работает? Т.е. это выражение найдёт только те вхождения "М", которым предшествует "\\\". Но почему 3 черты?

Это сообщение отредактировал(а) barcelona - 9.7.2008, 09:59
PM MAIL   Вверх
Feldmarschall
Дата 9.7.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



не \\\, а \
PM   Вверх
barcelona
Дата 9.7.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



Одна черта экранирует другую, а третья зачем?
PM MAIL   Вверх
Feldmarschall
Дата 9.7.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



затем, что 
а) в регулярках косая черта - спецсимвол. который надо экранировать
б) сделать echo '/(?<!\\\)М/'; и много думать.
PM   Вверх
sTa1kEr
Дата 10.7.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



Цитата(SamDark @  8.7.2008,  19:23 Найти цитируемый пост)
перед «M» обязательно должен быть «\»

Наоборот, восклицательный знак говорит о том, что перед M не должно быть слеша.

Цитата(Feldmarschall @  8.7.2008,  23:37 Найти цитируемый пост)
А три слеша - это perl-style optimisarion, типа, и трех достаточно вместо канонических четырех? 

Насколько я понимаю, все намного проще. http://php.net/string
Цитата

To specify a literal single quote, escape it with a backslash (\). To specify a literal backslash before a single quote, or at the end of the string, double it (\\). Note that attempting to escape any other character will print the backslash too. 

Т.е. первыйслешь экранируется, а второй экранировать не требуется, т.к. после него нету управляющего символа.
PM MAIL   Вверх
sTa1kEr
Дата 10.7.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



Цитата(barcelona @  9.7.2008,  10:50 Найти цитируемый пост)
И всё-таки мне непонятно, как это выражение работает?

Похоже аналог функции date. Т.е. в некой строке (y m d) заменяет специальные не экранированные символы на нужные значения.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0917 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.