Регулярные выражения

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

pashtet
Сообщения: 73
Зарегистрирован: 09 апр 2006, 10:53
Откуда: Белгород

благодарю isms.ru
начал видоизменять твоё и в итоге дошёл до:
$str = ereg_replace("\#[a-fA-F0-9]{6}","<font color=\\0>", $str);
правда и условия задачки немного поменял, но главное работает
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Лучше используй Перловые регекспы из семейства preg_*. В данном случае - preg_replace().
2B OR NOT(2B) = FF
Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

pashtet,
Если уже понял, как они в принципе работают, то вот
http://ru2.php.net/manual/ru/reference. ... syntax.php
http://ru2.php.net/manual/ru/reference. ... ifiers.php

Собственно не такие сложные. Если еще не понял, то почитай:
http://phpclub.ru/detail/article/regexp_1
http://phpclub.ru/detail/article/regexp_2
Тут подробно на пальцах объясняется что да как, главное один раз понять и отпрактиковать их, чтобы запомнить то что понял и потом легко писать :) Очень советую, тем более что работают они быстро
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Конкретно в этом случае можно даже на Паскале без регулярных выражений обойтись
if pos('[c',s)<>0 and pos(']',s)=pos('[c',s)+8 then
begin
x:=pos('[c',s);
temp:=copy(s,x+2,6); //копируем 6 символов
delete(s,x,9); //Удаляем 9 символов, включая [c и ]
s:=insert('<font color=#'+temp+'>',s,x); //не уверен в правильности синтаксиса функции insert, но общий смысл именно такой
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Хыиуду писал(а):Конкретно в этом случае можно даже на Паскале без регулярных выражений обойтись
if pos('[c',s)<>0 and pos(']',s)=pos('[c',s)+8 then
begin
x:=pos('[c',s);
temp:=copy(s,x+2,6); //копируем 6 символов
delete(s,x,9); //Удаляем 9 символов, включая [c и ]
s:=insert('<font color=#'+temp+'>',s,x); //не уверен в правильности синтаксиса функции insert, но общий смысл именно такой
end;
Регекспы самодокументируемы. Если используется preg_replace, то сразу понятно что идет замена по шаблону. Разбираться в тупых преобразованиях строк, которые наворотил тупой студент совершенно несподручно.
Кроме того, реuексповый код написан не на перле/ПХП, а на C.
2B OR NOT(2B) = FF
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Про документацию и удобство разбора - это уже дело десятое. Я сейчас имел в виду вот это:
Absurd писал(а):проверка строк на соответствие шаблону не исчерпывается email и url'ами. И регулярные выражения - это единственно допустимый способ это делать. С заменой - тоже самое.
Как показывает практика - не единственный
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Хыиуду писал(а):Про документацию и удобство разбора - это уже дело десятое. Я сейчас имел в виду вот это:
Нет, документация и мэйтенанс кода - это дело первое. Даже важнее написания.
Хыиуду писал(а): Как показывает практика - не единственный
#Цензоред# такую практику. Надо проверить строку - берем регексп. Надо заменить по шаблону - берем регексп. Все.
2B OR NOT(2B) = FF
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Absurd писал(а):Нет, документация и мэйтенанс кода - это дело первое. Даже важнее написания.

#Цензоред# такую практику. Надо проверить строку - берем регексп. Надо заменить по шаблону - берем регексп. Все.
Согласиться не соглашусь, но спорить не буду, ибо флуд. Все.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
isms.ru
Сообщения: 48
Зарегистрирован: 11 янв 2007, 16:45

Если есть регекспы - юзай их.

Вот это надо взять за правило.

Тут встала задачка: есть БД, из которой формируются сообщения форума. Есть массив ключевых слов. Надо при выводе форума слова, которые ключевые заменять ссылками.

это делается 1 строкой (93 символа) при этом оптимизации нет.
Ответить