|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.05.2010, 16:45 | #1 |
Пользователь
Регистрация: 31.07.2009
Сообщений: 89
|
Проблема с TRegExpr
При использовании регулярных выражений(TRegExpr) возникает такая ошибка
Использую вот такой код Код:
Последний раз редактировалось zver777; 06.05.2010 в 16:50. |
07.05.2010, 07:39 | #2 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
Есть предположение, что выходите за размерность массива.
вместо s:=regexpr1.Replace(s,regexpr1.Matc h[1]); попробуйте s:=regexpr1.Replace(s,regexpr1.Matc h[0]); |
07.05.2010, 14:27 | #3 |
Пользователь
Регистрация: 31.07.2009
Сообщений: 89
|
Если использовать regexpr1.Match[0], то получится, что будет текст заменяться на тот же текст.
Мне же надо из строки вида <blabla>text<blabla> при использовании реглуярки <blabla>(.*?)</blabla> заменить на text. |
11.05.2010, 07:00 | #4 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
Прошу прощения. Действительно сморозил глупость.
Ваша проблема возникает из-за того, что внутри ф-ции Replace происходит вызов ExecNext. Из-за этого происходит повторный вызов этой самой ExecNext уже в Вашем коде, который и приводит к возникновению исключения. Вот пример рабочего кода, которым подсвечиваются ключевые слова: Код:
Если не хочется делать этого вручную, то - как мне кажется - придётся использовать два экземпляра TRegExp-а. Первый для того, что бы найти все совпадения, второй - что бы производить замены. Есть ещё вариант первым шагом построить список необходимых замен, после чего в цикле вызвать Replace для каждого элемента полученного списка. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с рамами/Проблема с ЖД | DRAGGER | Компьютерное железо | 6 | 04.01.2009 23:37 |