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

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

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

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

Подскажите пожалуйста, мне нужно найти в строке выражение вида [c10af7c] и заменить его на <font color=10af7c>. Ну как видно мне это нужно для замены псевдотегов на реальные. То есть квадратные скобки в которых буква "c" и за которой следуют 6 шестнадцатеричных цифр. Я знаю что это делается с помощью регулярных выражений, но я никак немогу сделать, и вообще плохо представляю как работают эти самые регулярные выражения. Немогли бы вы мне показать как это делается?
Совсем забыл. Это надо сделать на php
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Не напрягайся регулярные - гемор для мозгов юзай что-то типо этого
str_replace("что", "на что", "где");
isms.ru
Сообщения: 48
Зарегистрирован: 11 янв 2007, 16:45

s/\[c([A-Fa-f0-9)\]/<font color=$1>/gs
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Duncon писал(а):Не напрягайся регулярные - гемор для мозгов юзай что-то типо этого
str_replace("что", "на что", "где");
Интересно, как ты намереваешься проверять валидность к примеру E-Mail адреса при помощи простых строчных функций.
2B OR NOT(2B) = FF
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Здесь вопрос стоял о замене текста, а не о проверке мыла..
хотя и это тоже можно сделать без регулярнаых
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Duncon писал(а):Здесь вопрос стоял о замене текста, а не о проверке мыла..
хотя и это тоже можно сделать без регулярнаых
Не сомневаюсь в наличии каких-нибудь check_email()/check_url() в PHP, но проверка строк на соответствие шаблону не исчерпывается email и url'ами. И регулярные выражения - это единственно допустимый способ это делать. С заменой - тоже самое.
2B OR NOT(2B) = FF
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Не, не так, нет единственного способа ни в одном языке, вот смотри есть такая ункция strstr - проверяет на наличее в строке..
Ну и теперь скажи что без регулярных не обойтись..
(ps я не против регулярных, но как факт можно и без них)
pashtet
Сообщения: 73
Зарегистрирован: 09 апр 2006, 10:53
Откуда: Белгород

isms.ru писал(а):s/\[c([A-Fa-f0-9)\]/<font color=$1>/gs
А как это работает? куда вставлять?

Я нашёл ток такой привер
$str = "May 15, 2003";
$pattern = "/(\w+) (\d+), (\d+)/i";
$replacement = "1 \${1} \$3";
print preg_replace($pattern, $replacement, $str);

Но что из твоей строки pattern а что replacement? у тебя же оно получилось неделимое
pashtet
Сообщения: 73
Зарегистрирован: 09 апр 2006, 10:53
Откуда: Белгород

Duncon писал(а):Не, не так, нет единственного способа ни в одном языке, вот смотри есть такая ункция strstr - проверяет на наличее в строке..
Ну и теперь скажи что без регулярных не обойтись..
(ps я не против регулярных, но как факт можно и без них)
Такие функции неподходят, потому что в них нужно явно указывать что на что менять, или нет? А раз так значит придётся перечислять всевозможные варианты - 16 в 6 степени. Многовато получается.
isms.ru
Сообщения: 48
Зарегистрирован: 11 янв 2007, 16:45

А в задаче не стояло, на каком языке писать. Я написал на перле.

s/\[c([A-Fa-f0-9)\]/<font color=$1>/gs

s - что происходит замена

\[c([A-Fa-f0-9)\] - это что ищется типа паттерн
<font color=$1> - это на что меняется

gs - ключи

2Duncon: однозначности нет, но иногда удобнее. Например с помощью регекспов RSS парсю - одна строчка кода :-)
Ответить