1. После кода #3 следует цвет текста 15 или 2 или 01(тоже, что и 1).
2. После кода #3 следует цвет текста и цвет фона текста 15 и 1, 2 и 12, 01 и 04 (тоже, что и 1 и 4).
3. Код без последующих цифр — отмена цветового оформления текста..
(Это цветовая модель MiRC).
Вопрос: Как мне в данной строке поочередно определять, какой тип кода записан, вытащить из кода номер цвета текста и, если есть, номер цвета фона текста, если код только цвета текста, то код заменить на \сFFFFFF (где FFFFFF вставляется по номеру цвета), если указан и цвет текста и цвет фона, то заменить код на \cFFFFFF\k000000 (где FFFFFF и 000000 вставляются по номеру цвета), а если (пример 3) не указано вообще цвета, то кода заменять по аналогии с примером 2, но вместо FFFFFF и 000000 вставить константы (т.е. цвета, указанные по умолчанию)?
P.S. Я писал функцию, которая посимвольно обрабатывает строку, но она получается большая и я немогу ее до конца отладить... Руки, наверное, кривые...
Здравствуйте, Softwarer, Вы писали:
S>Здравствуйте, Error202, Вы писали:
E>>Определить наличие с их помощью можно, как проверить значение кода и как заменит сам код?...
S>Точно так же. Это входит в стандартный функционал регулярных выражений.
Нахожу код по #3(\d{1,2}),(\d{1,2})*
А как вытащить данные \d{1,2} и потом его заменить полностью....??
Здравствуйте, Error202, Вы писали:
E>>>Определить наличие с их помощью можно, как проверить значение кода и как заменит сам код?...
S>>Точно так же. Это входит в стандартный функционал регулярных выражений.
E>Нахожу код по #3(\d{1,2}),(\d{1,2})* E>А как вытащить данные \d{1,2} и потом его заменить полностью....??
на сколько я вижу — синтаксис перла?
my $test =~ /#3(\d{1,2}),(\d{1,2})*/;
my $code1 = $1; # первые круглые скобки
my $code2 = $2; # вторые скобки
а запятую я бы в скобку запихнул...
с заменой можно так (просто пример):
my $test =~ s|(http:\/\/)|\1norilsk\.net\/redir\/\1|g;
Замена внешних адресов на redirect
\1 во второй части выражения это первые круглые скобки тоже самое что и $1
Здравствуйте, yury_xtc, Вы писали:
_>Здравствуйте, Error202, Вы писали:
E>>>>Определить наличие с их помощью можно, как проверить значение кода и как заменит сам код?...
S>>>Точно так же. Это входит в стандартный функционал регулярных выражений.
E>>Нахожу код по #3(\d{1,2}),(\d{1,2})* E>>А как вытащить данные \d{1,2} и потом его заменить полностью....??
_>на сколько я вижу — синтаксис перла?
_>my $test =~ /#3(\d{1,2}),(\d{1,2})*/; _>my $code1 = $1; # первые круглые скобки _>my $code2 = $2; # вторые скобки
_>а запятую я бы в скобку запихнул... _>с заменой можно так (просто пример):
_>my $test =~ s|(http:\/\/)|\1norilsk\.net\/redir\/\1|g;
_>Замена внешних адресов на redirect _>\1 во второй части выражения это первые круглые скобки тоже самое что и $1
Спасибо! Для Перла я понял...
Просто использую компонентик RegExp для дельфи (он работет по аналогии Перла)...
Я не знаю как выцепить $1, $2... Вернее там можно в шаблоне сделать: текст текст $1 текст...
Т.е. есть шаблон и есть исходный текст... выцепляются нужные данные из исходного текста и подставляются в шаблон...
Но мне нужно, чтоб эти данные, перед подстановкой в шаблон дополнительно изменялись на \cЦВЕТ.....??
Здравствуйте, Error202, Вы писали:
E>Но мне нужно, чтоб эти данные, перед подстановкой в шаблон дополнительно изменялись на \cЦВЕТ.....??
Насколько я понимаю, у Вас есть на входе (допустим) #315, и Вы можете заменить на \c15 — так? Теперь, если сами по себе регулярные выражения этого не умеют, осталось выполнить что-нибуть типа StringReplace, чтобы заменить \c15 на \c"константа, соответствующая 15-му цвету". Соответственно в цикле для возможных констант, только аккуратно — чтобы не произвести замены в уже замененном.
Но собственно, насколько я понимаю, между регулярным выражением, которое меняет #3 на \c, и между регулярным выражением, которое меняет #315 на \c00FFAA (вкупе с десятком таких же для других пар) нет какой-то принципиальной разницы.
Softwarer, Вы писали: E>>Но мне нужно, чтоб эти данные, перед подстановкой в шаблон дополнительно изменялись на \cЦВЕТ.....??
S>Насколько я понимаю, у Вас есть на входе (допустим) #315, и Вы можете заменить на \c15 — так? Теперь, если сами по себе регулярные выражения этого не умеют, осталось выполнить что-нибуть типа StringReplace, чтобы заменить \c15 на \c"константа, соответствующая 15-му цвету". Соответственно в цикле для возможных констант, только аккуратно — чтобы не произвести замены в уже замененном.
и да и нет...
для обсуждаемого примера
my $text =~ s|#3(\d{,2})|\c\1|;
заменять #3NN на \cNN и это работает один раз
для заменя польностью во всё м текст надо добавить модификатор g
my $text =~ s|#3(\d{,2})|\c\1|g; # теперь точно во всём тексте...
если компонента строго следует Перловому синтаксису — это должно работать...
только модификаторы могут быть чуть в другом виде...
а для приведённого выше use case выражение надо переписать...
я перла я себе примерно представляю как — а вот для компоненты...
Здравствуйте, yury_xtc, Вы писали:
_>Здравствуйте, Error202:
_>Softwarer, Вы писали: E>>>Но мне нужно, чтоб эти данные, перед подстановкой в шаблон дополнительно изменялись на \cЦВЕТ.....??
S>>Насколько я понимаю, у Вас есть на входе (допустим) #315, и Вы можете заменить на \c15 — так? Теперь, если сами по себе регулярные выражения этого не умеют, осталось выполнить что-нибуть типа StringReplace, чтобы заменить \c15 на \c"константа, соответствующая 15-му цвету". Соответственно в цикле для возможных констант, только аккуратно — чтобы не произвести замены в уже замененном.
_>и да и нет...
_>для обсуждаемого примера
_>my $text =~ s|#3(\d{,2})|\c\1|;
_>заменять #3NN на \cNN и это работает один раз _>для заменя польностью во всё м текст надо добавить модификатор g
_>my $text =~ s|#3(\d{,2})|\c\1|g; # теперь точно во всём тексте...
_>если компонента строго следует Перловому синтаксису — это должно работать... _>только модификаторы могут быть чуть в другом виде...
_>а для приведённого выше use case выражение надо переписать... _>я перла я себе примерно представляю как — а вот для компоненты...
_>кстати что за компонента (название, url) ?
Здравствуйте, Softwarer, Вы писали:
S>Здравствуйте, Error202, Вы писали:
S>Но собственно, насколько я понимаю, между регулярным выражением, которое меняет #3 на \c, и между регулярным выражением, которое меняет #315 на \c00FFAA (вкупе с десятком таких же для других пар) нет какой-то принципиальной разницы.
Есть еще другая задача...
Помимо того, чтобы найти изаменить...
У меня цикл.. т.к. этот компонент не имеет параметра (как перл) /g
этот цикл пробивает каждое совпадение рег.выраж. в строке..
ПОКА не конец строки ДЕЛАТЬ
НАЧАЛО
проверка вхождения
ЕСЛИ есть, ТО
НАЧАЛО
замена $1, $2 и подготовка модифицированного кода
??????? как вставить эту строку вместо кода ???
КОНЕЦ
КОНЕЦ
Здравствуйте, Error202, Вы писали:
E>ПОКА не конец строки ДЕЛАТЬ E> НАЧАЛО E> проверка вхождения E> ЕСЛИ есть, ТО E> НАЧАЛО E> замена $1, $2 и подготовка модифицированного кода E> ??????? как вставить эту строку вместо кода ??? E> КОНЕЦ E> КОНЕЦ
а уверен что "замена $1, $2 " не проиходит прямо в тексте?
пробовал уже?
Здравствуйте, yury_xtc, Вы писали:
_>Здравствуйте, Error202, Вы писали:
E>>ПОКА не конец строки ДЕЛАТЬ E>> НАЧАЛО E>> проверка вхождения E>> ЕСЛИ есть, ТО E>> НАЧАЛО E>> замена $1, $2 и подготовка модифицированного кода E>> ??????? как вставить эту строку вместо кода ??? E>> КОНЕЦ E>> КОНЕЦ
_>а уверен что "замена $1, $2 " не проиходит прямо в тексте? _>пробовал уже?
Да... Выцепляю их и заменяю на нужное... А вот как вставить вместо того кода, откуда я их выцепил...?