Технический вопрос
От: Error202 https://zertex.ru
Дата: 28.01.05 11:28
Оценка:
Есть строка вида: ничего на [код]свете[код] лучше нету...

Код — комбинация символов #3 и цифр(0-15), т,е.

1. #315; #32; #301;
2. #315,1; #32,12; #301,04;
3. #3

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. Я писал функцию, которая посимвольно обрабатывает строку, но она получается большая и я немогу ее до конца отладить... Руки, наверное, кривые...

ПРОШУ ПОМОЩИ!
Re: Технический вопрос
От: Softwarer http://softwarer.ru
Дата: 28.01.05 11:33
Оценка:
Здравствуйте, Error202, Вы писали:

Напоминает задачу на регулярные выражения.
Re[2]: Технический вопрос
От: Error202 https://zertex.ru
Дата: 28.01.05 11:44
Оценка:
Здравствуйте, Softwarer, Вы писали:

S>Здравствуйте, Error202, Вы писали:


S>Напоминает задачу на регулярные выражения.


Определить наличие с их помощью можно, как проверить значение кода и как заменит сам код?...
Re[3]: Технический вопрос
От: Softwarer http://softwarer.ru
Дата: 28.01.05 11:51
Оценка:
Здравствуйте, Error202, Вы писали:

E>Определить наличие с их помощью можно, как проверить значение кода и как заменит сам код?...


Точно так же. Это входит в стандартный функционал регулярных выражений.
Re[4]: Технический вопрос
От: Error202 https://zertex.ru
Дата: 28.01.05 12:23
Оценка:
Здравствуйте, Softwarer, Вы писали:

S>Здравствуйте, Error202, Вы писали:


E>>Определить наличие с их помощью можно, как проверить значение кода и как заменит сам код?...


S>Точно так же. Это входит в стандартный функционал регулярных выражений.


Нахожу код по #3(\d{1,2}),(\d{1,2})*
А как вытащить данные \d{1,2} и потом его заменить полностью....??
Re[5]: Технический вопрос
От: yury_xtc  
Дата: 28.01.05 12:41
Оценка:
Здравствуйте, 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
Re[6]: Технический вопрос
От: Error202 https://zertex.ru
Дата: 28.01.05 12:55
Оценка:
Здравствуйте, 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ЦВЕТ.....??
Re[7]: Технический вопрос
От: Softwarer http://softwarer.ru
Дата: 28.01.05 13:06
Оценка:
Здравствуйте, Error202, Вы писали:

E>Но мне нужно, чтоб эти данные, перед подстановкой в шаблон дополнительно изменялись на \cЦВЕТ.....??


Насколько я понимаю, у Вас есть на входе (допустим) #315, и Вы можете заменить на \c15 — так? Теперь, если сами по себе регулярные выражения этого не умеют, осталось выполнить что-нибуть типа StringReplace, чтобы заменить \c15 на \c"константа, соответствующая 15-му цвету". Соответственно в цикле для возможных констант, только аккуратно — чтобы не произвести замены в уже замененном.
Re[8]: Технический вопрос
От: Softwarer http://softwarer.ru
Дата: 28.01.05 13:14
Оценка:
Здравствуйте, Error202, Вы писали:

Но собственно, насколько я понимаю, между регулярным выражением, которое меняет #3 на \c, и между регулярным выражением, которое меняет #315 на \c00FFAA (вкупе с десятком таких же для других пар) нет какой-то принципиальной разницы.
Re[8]: Технический вопрос
От: yury_xtc  
Дата: 28.01.05 13:35
Оценка:
Здравствуйте, 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) ?
Re[9]: Технический вопрос
От: Error202 https://zertex.ru
Дата: 28.01.05 13:53
Оценка:
Здравствуйте, 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) ?


http://regexpstudio.com/RU/
TRegExpr
Re[9]: Технический вопрос
От: Error202 https://zertex.ru
Дата: 28.01.05 13:59
Оценка:
Здравствуйте, Softwarer, Вы писали:

S>Здравствуйте, Error202, Вы писали:


S>Но собственно, насколько я понимаю, между регулярным выражением, которое меняет #3 на \c, и между регулярным выражением, которое меняет #315 на \c00FFAA (вкупе с десятком таких же для других пар) нет какой-то принципиальной разницы.


Есть еще другая задача...

Помимо того, чтобы найти изаменить...
У меня цикл.. т.к. этот компонент не имеет параметра (как перл) /g
этот цикл пробивает каждое совпадение рег.выраж. в строке..

ПОКА не конец строки ДЕЛАТЬ
НАЧАЛО
проверка вхождения
ЕСЛИ есть, ТО
НАЧАЛО
замена $1, $2 и подготовка модифицированного кода
??????? как вставить эту строку вместо кода ???
КОНЕЦ
КОНЕЦ
Re[10]: Технический вопрос
От: yury_xtc  
Дата: 28.01.05 14:14
Оценка:
Здравствуйте, Error202, Вы писали:

E>ПОКА не конец строки ДЕЛАТЬ

E> НАЧАЛО
E> проверка вхождения
E> ЕСЛИ есть, ТО
E> НАЧАЛО
E> замена $1, $2 и подготовка модифицированного кода
E> ??????? как вставить эту строку вместо кода ???
E> КОНЕЦ
E> КОНЕЦ

а уверен что "замена $1, $2 " не проиходит прямо в тексте?
пробовал уже?
Re[11]: Технический вопрос
От: Error202 https://zertex.ru
Дата: 28.01.05 14:36
Оценка:
Здравствуйте, yury_xtc, Вы писали:

_>Здравствуйте, Error202, Вы писали:


E>>ПОКА не конец строки ДЕЛАТЬ

E>> НАЧАЛО
E>> проверка вхождения
E>> ЕСЛИ есть, ТО
E>> НАЧАЛО
E>> замена $1, $2 и подготовка модифицированного кода
E>> ??????? как вставить эту строку вместо кода ???
E>> КОНЕЦ
E>> КОНЕЦ

_>а уверен что "замена $1, $2 " не проиходит прямо в тексте?

_>пробовал уже?

Да... Выцепляю их и заменяю на нужное... А вот как вставить вместо того кода, откуда я их выцепил...?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.