![]() |
|
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]()
|
|
| starmaster |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 29.3.2004 Репутация: нет Всего: нет |
Какие мануалы я только не читал про регулярные выражения, всё равно они мне не понятны... Ну уже любая вещь в PHP ясна как день кроме рег. выражений... Вроде бы что-то понятно, но на практике почему-то редко когда какой-то шаблон работает... Остались неясными следущие случаи, например:
1) Дана строка. В ней могут содержаться как большие, так и маленькие буквы, символ подчёркивания. При том, в строке не может быть только один символ подчёркивания в любом количестве (без букв)... 2) В строке перед тегами <b> поставить тег <i> а после </b> - соответственно </i> 3) В строке у каждого незакрытого а) тега <b> б) любого тега поставить в закрывающем тэге слэш "/" Например, дана строка идфоадл<b>;dsf<b>//fsd Должно получиться идфоадл<b>;dsf</b>//fsd Использовать только один шаблон... Вот как раз приёмы реализации этих случаев в регулярных выражениях мне неясны... Помогите разобраться... |
|||
|
||||
| BIG BROTHER |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 9.12.2004 Где: Россия, Москва Репутация: 1 Всего: 4 |
1. #[a-z_]#is
2. preg_replace("#<b>(.*?)</b>#is", "<i><b>//1</b></i>", $str); 3. что-то не придумывается никак Вроде должно работать --------------------
Mess with the best, die like the rest |
|||
|
||||
| skalex |
|
||||||||||||
|
Хороший человек ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 895 Регистрация: 2.4.2004 Репутация: 0 Всего: 23 |
Не совсем понятно ... Поподробнее можешь?
Полагаю, что использование регулярных выражений здесь необязательно. Можно обойтись и функцией str_replace(). Т.е.
Ну а если приспичило регулярнымы выражениями, то используй preg_replace(). Принцип тот же ...
Если что непонятно, спрашивай! |
||||||||||||
|
|||||||||||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 16 Всего: 261 |
||||
|
||||
| BIG BROTHER |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 9.12.2004 Где: Россия, Москва Репутация: 1 Всего: 4 |
ИМХО не совсем оптимальный способ использования preg_replace. Скорость упадет Это сообщение отредактировал(а) BIG BROTHER - 24.1.2006, 18:53 --------------------
Mess with the best, die like the rest |
|||
|
||||
| skalex |
|
|||
|
Хороший человек ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 895 Регистрация: 2.4.2004 Репутация: 0 Всего: 23 |
BIG BROTHER, я же сказал, что в том примере, использование регулярных выражений ни к чему.
|
|||
|
||||
| starmaster |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 29.3.2004 Репутация: нет Всего: нет |
Нет ребята всё не то... Я прекрасно понимаю как с помощью регулярных выражений проверять есть ли в строке тот или иной шаблон... Но как работать с исключениями не совсем ясно...
1) По первому примеру: например, мы разрешаем пользователю иметь такой логин: "а_а" , но вполне логично что мы не разрешим иметь ему логин вида "___" 2) Например в каком-нибудь тексте мы захотим любой жирный текст вида "<b>something</b>" преобразовать ещё и в наклонный "<i><b>something</b></i>" 3) В тексте пользователь забывает закрыть какой-нибудь тег: "<b>something<b>", естественно это нас не устроит и мы захотим преобразовать его текст в "<b>something</b>" Все эти задачи вполне можно решить с помощью строковых функций, но хотелось бы попробовать их решить с помощью рег. выражений, иначе смысл их пропадает, если они созданы только для того, чтобы в тексте выделять текст соответствующий шаблону... Читал я и эту тему и тему про "задания на знание PCRE", но опять же, там довольно таки элементарные задачи, без исключений, которые есть в моих примерах... Это сообщение отредактировал(а) starmaster - 25.1.2006, 00:32 |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
#^(?(?!^_+$)[a-z_]+)$#i 2) уже ответили. 3) Задача нетривиальна, одним регом не обойтись, ИМХО... Теги могут быть вложены. Это сообщение отредактировал(а) S.A.P. - 25.1.2006, 01:21 |
|||
|
||||
| IvanB |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
Советую почитать эти статьи....
Давно выкачал.... Пригодились. Присоединённый файл ( Кол-во скачиваний: 17 )
Regexp.rar 28,98 Kb--------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
|||
|
||||
| starmaster |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 29.3.2004 Репутация: нет Всего: нет |
IvanB
Да видел эту статью, читал мельком, вчера всё прочитал... Как находить в тексте шаблоны мне понятно... Но как работать с исключениями всё равно не очень понятно... Вот, к примеру, задача, в которой мы не знаем порядок следования слов: человек авторизируется, мы ему разрешаем иметь любое количество слов, но максимальное количество пробелов не должно привыжать n, - какое нибудь количество и добавлю ещё, что пробел между словами может быть только один, т.е. один \s. Это сообщение отредактировал(а) starmaster - 31.1.2006, 01:55 |
|||
|
||||
| IvanB |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
Проверить допустимость количества пробелов?
Вопросы, которые стоят в начале темы: 1) Можно ещё так:
2) Написано выше. От себя добавлю (при условии, что нет тегов, вложенных в <b></b>):
3) Попробуй так (при условии, что нет тегов, вложенных в <b></b>):
Это сообщение отредактировал(а) IvanB - 1.2.2006, 09:35 --------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
||||||||
|
|||||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Тексты | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |