![]() |
PHP Регулярные Выражения
Как с помощью регулярных выражений преобразовать
Код:
[ b ]text[/ b ] (без пробелов)Код:
<b>text</b>Спасибо. Вообще, где можно почитать про эти выражения? |
Например вот так:
$string=preg_replace("/\[b\]/si","<b>",$string); $string=preg_replace("/\[\/b\]/si","</b>",$string); |
А может просто и сразу?:
PHP код:
Цитата:
|
Спасибо. А как заменить
[color = AAA]text[/color] на <font color='AAA'>text</font>? И по какому приницу, вообще говоря, работает \\1? |
Т.е. мне не ясен ключевой момент:
Каким образом [color = AAA]text[/color] заменяется на <font color='AAA'>text</font> а не на <font color='[color = AAA]'>text</font> каким образом указывается, какую часть совпадения переносить :S |
\\0 - вся строка в которой найдено совпадение
\\1 - это первое найденое совпадение с шаблоном (ограниченое круглыми скобками) и т.д. слева направо по круглым скобкам. таким образом для указания захватываемого (переносимого) паттерна необходимо заключить его в круглые скобки и после обратится к нему по его порядковому номеру. ЗЫ Для _не_ захватывания используется (?:паттерн). |
Fiery_Fenix
Ага! Теперь мне наконец все понятно :) Лови звездочку. P.S. А квадратные скобочками совпадениями не являются? |
квадратные скобочки - это обычно группа символов, пример:
[a-zA-Z0-9] - все латинские буквы и цифры p.s. в данном случае скобки экранированы слешем, посему это обычные символы. |
Цитата:
А если ты имеешь ввиду конструкцию [шаблон] то это обозначает класс символов. |
а как скажем сделать такую штуку:
есть дата: (d-m-y H:i) нужно месяц заменить на словесный аналог, русский. как бы это сделать одной строкой? |
Функции date(), strtotime() и русская локаль тебе помогут.
А раз в этой теме, может тебе нужно именно регулярным выражением? Тогда приблизительно так: PHP код:
Если уж нужно на регах, то помоему лучше уж так: (хоть и в 2 строки): PHP код:
|
Посмотрите, я правильно сформировал выражение?
(с точки зрения безопастности) PHP код:
|
у меня почему-то через локаль не заработало:) я так изначально и хотел.
в итоге сделал просто: массив с месяцами($monthArray), из даты берем месяц, как число($currentMonth) -> $monthArray[$currentMonth-1], далее собираем дату. регулярки - ради спортивного интереса:) p.s. изначально у меня был такой вариант, но я не допер вот до этого: "\\1{$month[\\2]}"', что в данном случае значат {} ? |
Sheryld
>> что такое { }? Ограничитель переменной $month[]... А что насчет моего последнего поста? |
Я бы поставил модификаторы s и i в конце паттерна -> "...color\]/si"
s - dot (точка) соответствует всем символам, включая символы новой строки (а вдруг текст многострочный?) i - буквы в патэрне совпадают независимо от регистра по поводу ([#]?[A-z]*), а цвет точно только в буквеном эквиваленте? да и знаки ? и * "жадные", я бы написал так: ([#]??[0-9A-z]*?). |
А что значит "жадные"?
Цитата:
|
Цитата:
про {} тебе ответил Neo хочу лишь отметить что они в данном случае необходимы потомц что в строке обращение к массивеу. P.S. Никого не хочу обидеть но не кажется Вам странным задавать подобные вопросы, незная элементарного - способов обращения к переменным в языке? :confused: :biggrin: Цитата:
P.S.2 И про жадность и про ее ограничение в тех ссылках что я дал подробно описано, неужели так сложно прочитать пяток страниц текста с примерами... |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Понятно..
Значит, и тут могут быть проблемы: [color= aaa ][color = aaa]bbb[/color]aaaaaaaa[/color ] Верно? |
Цитата:
Скажем так, просто это нужно учитывать, и понимать как работет, чтобы их не возникло ;) |
ОК, но у меня эта конструкция с вложениями не работает
[color=red ][color=blue ]aaa[/color ]aaa[/color ] дает [color=blue ]aaa[/color ]aaa %( Почему? |
Дак она какраз и работает, посмотри, она правильно выбрала текст и обработала его.
Я немного о другом говорил, когда про вложенность толковал. А данную задачу, поскольку она простая и вполне может быть разбита на фрагменты легко, проще всего решить так (ну чтобы не обрабатывать строку в цикле или рекурсивно): PHP код:
|
Hubbitus
Понял, спасибо. Про возможность замены с использованием массивов не знал :) |
Про регулярные выражения читал тут:
http://www.softtime.ru/bookphp/gl7_12.php тнестировал тут: http://www.javaregex.com/test.html всё понравилось... ;) |
Есть ещё один вопрос! :help:
Возможно ли с помощью регулярных выражений сделать заглавными первые буквы предложений из определённого текста? Вот собственно и весь вопрос... Если да, то как именно? Заранее благодарен за помощь! :молись: |
на самом деле задача не простая, если нужно именно менять(именно заменять) первую букву на ее аналог, но только заглавный.
можно сделать так(это по-сути только отображение): 1. выделяешь первую букву. 2. меняешь ее(на <span class=capitalizeClass>я</span>блоко) а в классе(css): Код:
.capitalizeClassКод:
<style> |
Цитата:
PHP код:
Для работы с русскими символами смотрите МАН и настройки локали сервера. |
точно, а я и забыл про эту функцию:)
|
| Часовой пояс GMT +4, время: 07:19. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.