imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 16.12.2004, 03:45     # 1
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
PHP Регулярные Выражения

Как с помощью регулярных выражений преобразовать

Код:
[ b ]text[/ b ] (без пробелов)
в

Код:
<b>text</b>
?

Спасибо.
Вообще, где можно почитать про эти выражения?
Psionic Vision вне форума  
Старый 16.12.2004, 04:11     # 2
Fiery_Fenix
Junior Member
 
Аватар для Fiery_Fenix
 
Регистрация: 04.03.2004
Адрес: /root/sbin
Сообщения: 193

Fiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царстве
Например вот так:
$string=preg_replace("/\[b\]/si","<b>",$string);
$string=preg_replace("/\[\/b\]/si","</b>",$string);
__________________
Кивляне! На сходку IMHO.ws шагом марш!
Fiery_Fenix вне форума  
Старый 16.12.2004, 14:46     # 3
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
А может просто и сразу?:
PHP код:
$ttt "[b]text[/b]";
$ttt preg_replace('/\[(\/?\w+)\]/si'"<\\1>"$ttt); 
Цитата:
Neo:Вообще, где можно почитать про эти выражения?
http://www.imho.ws/showpost.php?p=721825&postcount=9
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 17.12.2004, 01:54     # 4
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Спасибо. А как заменить

[color = AAA]text[/color]

на

<font color='AAA'>text</font>?

И по какому приницу, вообще говоря, работает \\1?
Psionic Vision вне форума  
Старый 17.12.2004, 03:31     # 5
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Т.е. мне не ясен ключевой момент:

Каким образом
[color = AAA]text[/color]
заменяется на
<font color='AAA'>text</font>
а не на
<font color='[color = AAA]'>text</font>

каким образом указывается, какую часть совпадения переносить :S
Psionic Vision вне форума  
Старый 17.12.2004, 04:38     # 6
Fiery_Fenix
Junior Member
 
Аватар для Fiery_Fenix
 
Регистрация: 04.03.2004
Адрес: /root/sbin
Сообщения: 193

Fiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царстве
\\0 - вся строка в которой найдено совпадение
\\1 - это первое найденое совпадение с шаблоном (ограниченое круглыми скобками)
и т.д. слева направо по круглым скобкам.
таким образом для указания захватываемого (переносимого) паттерна необходимо заключить его в круглые скобки и после обратится к нему по его порядковому номеру.
ЗЫ Для _не_ захватывания используется (?:паттерн).
__________________
Кивляне! На сходку IMHO.ws шагом марш!
Fiery_Fenix вне форума  
Старый 17.12.2004, 05:26     # 7
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Fiery_Fenix
Ага! Теперь мне наконец все понятно Лови звездочку.

P.S. А квадратные скобочками совпадениями не являются?
Psionic Vision вне форума  
Старый 17.12.2004, 11:09     # 8
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
квадратные скобочки - это обычно группа символов, пример:

[a-zA-Z0-9] - все латинские буквы и цифры

p.s. в данном случае скобки экранированы слешем, посему это обычные символы.
__________________
убрано по просьбе администратора

Последний раз редактировалось Sheryld; 17.12.2004 в 11:13.
Sheryld вне форума  
Старый 17.12.2004, 11:11     # 9
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Neo:
А квадратные скобочками совпадениями не являются?
Являются конечно, если в шаблоне, только в моем примере они стоят ВНЕ круглых и поэтому в переменную результата не включены.

А если ты имеешь ввиду конструкцию [шаблон] то это обозначает класс символов.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 17.12.2004, 11:15     # 10
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
а как скажем сделать такую штуку:

есть дата: (d-m-y H:i) нужно месяц заменить на словесный аналог, русский.

как бы это сделать одной строкой?
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 17.12.2004, 21:21     # 11
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Функции date(), strtotime() и русская локаль тебе помогут.

А раз в этой теме, может тебе нужно именно регулярным выражением? Тогда приблизительно так:
PHP код:
$str_date=preg_replace(array('/(^\d{2}\-)01/si','/(^\d{2}\-)02/si','/(^\d{2}\-)03/si','/(^\d{2}\-)04/si','/(^\d{2}\-)05/si','/(^\d{2}\-)06/si','/(^\d{2}\-)07/si','/(^\d{2}\-)08/si','/(^\d{2}\-)09/si','/(^\d{2}\-)10/si','/(^\d{2}\-)11/si','/(^\d{2}\-)12/si'),array('\\1Январь','\\1Февраль','\\1Март','\\1Апрель','\\1Май','\\1Июнь','\\1Июль','\\1Август','\\1Сентябрь','\\1Окрябрь','\\1Ноябрь','\\1Декабрь'),$str_date); 
Но, ИМХО, это изврат, зато в одну строчку!

Если уж нужно на регах, то помоему лучше уж так: (хоть и в 2 строки):
PHP код:
$month=array(1=>'Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Окрябрь','Ноябрь',12=>'Декабрь');
$str_date preg_replace('/^(\d{2}\-)(\d{2})/esi''"\\1{$month[\\2]}"'$str_date); 
P.S. IMHO, не нужно изобретать велосипед для усложнения жизни, лучше наоборот, поэтому первый вариант (со специально реализованными разработчиками функциями)) я считаю самым предпочтительным!
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.

Последний раз редактировалось Hubbitus; 17.12.2004 в 21:32.
Hubbitus вне форума  
Старый 18.12.2004, 00:34     # 12
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Посмотрите, я правильно сформировал выражение?
(с точки зрения безопастности)

PHP код:
$bbcode preg_replace('/\[color=([#]?[A-z]*)\](.*)\[\/color\]/'"<font color='\\1'>".htmlspecialchars("\\2",ENT_QUOTES)."</font>"$bbcode);


Может, что-нибудь стоит подкорректировать?

Последний раз редактировалось Neo; 18.12.2004 в 00:55.
Psionic Vision вне форума  
Старый 18.12.2004, 01:55     # 13
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
у меня почему-то через локаль не заработало я так изначально и хотел.

в итоге сделал просто:

массив с месяцами($monthArray), из даты берем месяц, как число($currentMonth) -> $monthArray[$currentMonth-1], далее собираем дату.

регулярки - ради спортивного интереса

p.s. изначально у меня был такой вариант, но я не допер вот до этого:

"\\1{$month[\\2]}"', что в данном случае значат {} ?
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 18.12.2004, 02:48     # 14
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Sheryld
>> что такое { }?
Ограничитель переменной $month[]...

А что насчет моего последнего поста?
Psionic Vision вне форума  
Старый 18.12.2004, 04:04     # 15
Fiery_Fenix
Junior Member
 
Аватар для Fiery_Fenix
 
Регистрация: 04.03.2004
Адрес: /root/sbin
Сообщения: 193

Fiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царствеFiery_Fenix Луч света в тёмном царстве
Я бы поставил модификаторы s и i в конце паттерна -> "...color\]/si"
s - dot (точка) соответствует всем символам, включая символы новой строки (а вдруг текст многострочный?)
i - буквы в патэрне совпадают независимо от регистра
по поводу ([#]?[A-z]*), а цвет точно только в буквеном эквиваленте? да и знаки ? и * "жадные", я бы написал так: ([#]??[0-9A-z]*?).
__________________
Кивляне! На сходку IMHO.ws шагом марш!
Fiery_Fenix вне форума  
Старый 18.12.2004, 06:37     # 16
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
А что значит "жадные"?

Цитата:
а цвет точно только в буквеном эквиваленте
не-а, об этом я не подумал
Psionic Vision вне форума  
Старый 18.12.2004, 13:46     # 17
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Sheryld:
в итоге сделал просто:

массив с месяцами($monthArray), из даты берем месяц, как число($currentMonth) -> $monthArray[$currentMonth-1], далее собираем дату.
Дак я именно так и сделал тебе в регулярном выражении, только для удобства начал массив с 1, чтобы не вычитать.

про {} тебе ответил Neo хочу лишь отметить что они в данном случае необходимы потомц что в строке обращение к массивеу.
P.S. Никого не хочу обидеть но не кажется Вам странным задавать подобные вопросы, незная элементарного - способов обращения к переменным в языке?

Цитата:
Neo:
А что значит "жадные"?
"Жадные" значит что поумолчанию совпадают с максимально возможным фрагментом подпадающим под выражение, в твоем случае это значит что выражению .* будет сопоставлена вся оставшаяся строка, ничего не оставив паттерну \[\/color\].

P.S.2 И про жадность и про ее ограничение в тех ссылках что я дал подробно описано, неужели так сложно прочитать пяток страниц текста с примерами...
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 18.12.2004, 18:24     # 18
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Цитата:
Hubbitus:
"Жадные" значит что поумолчанию совпадают с максимально возможным фрагментом подпадающим под выражение, в твоем случае это значит что выражению .* будет сопоставлена вся оставшаяся строка, ничего не оставив паттерну \[\/color\].
Понятно. Странно, каким образом тогда это работает?

Цитата:
P.S.2 И про жадность и про ее ограничение в тех ссылках что я дал подробно описано, неужели так сложно прочитать пяток страниц текста с примерами...
Сейчас почитаю Просто быстрее получить ответ.
Psionic Vision вне форума  
Старый 18.12.2004, 23:35     # 19
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Neo:
Понятно. Странно, каким образом тогда это работает?
Прошу прощения, я не совсем правильно выразился и ввел видимо в заблуждение, конечно в данном случае шаблону \[\/color\] будет нормально все сопоставлено, и в данном случае кстати не обязательно ограничивать жадность квантификатора. Это принципиально в более сложных шаблонах, когда есть альтернативы и необязательные паттерны..., например, лень придумывать, поэтому процитирую:

Цитата:
Классический пример проблем, которые могут возникнуть в связи с такой особенностью квантификаторов - нахождение комментариев в C-программах. Комментарием считается произвольный текст, находящийся внутри символьных комбинаций /* и */ (при этом, символы '/' и '*' также могут быть частью комментария). Попытка найти комментарии при помощи шаблона /\*.*\*/ в строке /* первый комментарий */ не комментарий /* второй комментарий */ закончится неудачей, поскольку указанный шаблон соответствует всей строке целиком (из-за жадности кватификатора '*').
Это достаточно часто используется, может потребоваться к примеру при обработке одинаковых вложенных тегов.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 19.12.2004, 01:26     # 20
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Понятно..
Значит, и тут могут быть проблемы:
[color= aaa ][color = aaa]bbb[/color]aaaaaaaa[/color ]

Верно?
Psionic Vision вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 19:00.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.