| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > Регулярные выражения |
| Автор: starmaster 24.1.2006, 09:41 |
| Какие мануалы я только не читал про регулярные выражения, всё равно они мне не понятны... Ну уже любая вещь в PHP ясна как день кроме рег. выражений... Вроде бы что-то понятно, но на практике почему-то редко когда какой-то шаблон работает... Остались неясными следущие случаи, например: 1) Дана строка. В ней могут содержаться как большие, так и маленькие буквы, символ подчёркивания. При том, в строке не может быть только один символ подчёркивания в любом количестве (без букв)... 2) В строке перед тегами <b> поставить тег <i> а после </b> - соответственно </i> 3) В строке у каждого незакрытого а) тега <b> б) любого тега поставить в закрывающем тэге слэш "/" Например, дана строка идфоадл<b>;dsf<b>//fsd Должно получиться идфоадл<b>;dsf</b>//fsd Использовать только один шаблон... Вот как раз приёмы реализации этих случаев в регулярных выражениях мне неясны... Помогите разобраться... |
| Автор: BIG BROTHER 24.1.2006, 10:51 |
| 1. #[a-z_]#is 2. preg_replace("#<b>(.*?)</b>#is", "<i><b>//1</b></i>", $str); 3. что-то не придумывается никак Вроде должно работать |
| Автор: skalex 24.1.2006, 10:55 | ||||||||||||
Не совсем понятно ... Поподробнее можешь?
Полагаю, что использование регулярных выражений здесь необязательно. Можно обойтись и функцией str_replace(). Т.е.
Ну а если приспичило регулярнымы выражениями, то используй preg_replace(). Принцип тот же ...
Если что непонятно, спрашивай! |
| Автор: Mal Hack 24.1.2006, 12:52 |
| Модератор: Название темы должно отражать ее суть! http://forum.vingrad.ru/index.php?showtopic=55191 |
| Автор: BIG BROTHER 24.1.2006, 18:49 | ||
ИМХО не совсем оптимальный способ использования preg_replace. Скорость упадет |
| Автор: skalex 24.1.2006, 19:22 |
| BIG BROTHER, я же сказал, что в том примере, использование регулярных выражений ни к чему. |
| Автор: starmaster 25.1.2006, 00:31 | ||
| Нет ребята всё не то... Я прекрасно понимаю как с помощью регулярных выражений проверять есть ли в строке тот или иной шаблон... Но как работать с исключениями не совсем ясно... 1) По первому примеру: например, мы разрешаем пользователю иметь такой логин: "а_а" , но вполне логично что мы не разрешим иметь ему логин вида "___" 2) Например в каком-нибудь тексте мы захотим любой жирный текст вида "<b>something</b>" преобразовать ещё и в наклонный "<i><b>something</b></i>" 3) В тексте пользователь забывает закрыть какой-нибудь тег: "<b>something<b>", естественно это нас не устроит и мы захотим преобразовать его текст в "<b>something</b>" Все эти задачи вполне можно решить с помощью строковых функций, но хотелось бы попробовать их решить с помощью рег. выражений, иначе смысл их пропадает, если они созданы только для того, чтобы в тексте выделять текст соответствующий шаблону...
Читал я и эту тему и тему про "задания на знание PCRE", но опять же, там довольно таки элементарные задачи, без исключений, которые есть в моих примерах... |
| Автор: IvanB 29.1.2006, 17:38 |
| Советую почитать эти статьи.... Давно выкачал.... Пригодились. |
| Автор: starmaster 31.1.2006, 01:24 |
| IvanB Да видел эту статью, читал мельком, вчера всё прочитал... Как находить в тексте шаблоны мне понятно... Но как работать с исключениями всё равно не очень понятно... Вот, к примеру, задача, в которой мы не знаем порядок следования слов: человек авторизируется, мы ему разрешаем иметь любое количество слов, но максимальное количество пробелов не должно привыжать n, - какое нибудь количество и добавлю ещё, что пробел между словами может быть только один, т.е. один \s. |
| Автор: IvanB 31.1.2006, 12:14 | ||||||||
Проверить допустимость количества пробелов?
Вопросы, которые стоят в начале темы: 1) Можно ещё так:
2) Написано выше. От себя добавлю (при условии, что нет тегов, вложенных в <b></b>):
3) Попробуй так (при условии, что нет тегов, вложенных в <b></b>):
|