Результат совпадения регулярки в макросе замены регуляркой

  • Автор темы Автор темы sergeda
  • Дата начала Дата начала

sergeda

Client
Регистрация
15.09.2011
Сообщения
294
Реакции
16
Баллы
18
Всем привет.
Подскажите как в макросе замены регуляркой можно в поле "На что заменять" вывести результат совпадения регулярки?
То есть хочу найти текст и с помощью макроса замены регуляркой вставить его же но с добавлением символов.
 
Можно отдельной веткой искать регулярное выражение, потом вставить результат этой ветки в "Что заменять" и в "Чем заменять" с добавлением необходимого текста.
 
в оба поля ставьте одну и туже регулярку. Но только во втором поле (на что заменять?) добавьте к регулярке нужные вам символы
 
в оба поля ставьте одну и туже регулярку. Но только во втором поле (на что заменять?) добавьте к регулярке нужные вам символы
Заманчиво, но не работает.
Вот пример:
Исходная строка:
<TBODY><TR><TD class=title>Код производителя</TD><TD class=field>U2311</TD></TR><TR class=color><TD class=title>Размер дисплея</TD><TD class=field>23 "</TD></TR><TR><TD class=title>Тип матрицы</TD><TD class=field>E-IPS</TD></TR>
Что заменять:
(?<=\<TD class\=title\>).*?(?=\<\/TD\>)
На что заменять:
~(?<=\<TD class\=title\>).*?(?=\<\/TD\>)~
Результат:
<TBODY><TR><TD class=title>~(?<=\<TD class\=title\>).*?(?=\<\/TD\>)~</TD><TD class=field>U2311</TD></TR><TR class=color><TD class=title>~(?<=\<TD class\=title\>).*?(?=\<\/TD\>)~</TD><TD class=field>23 "</TD></TR><TR><TD class=title>~(?<=\<TD class\=title\>).*?(?=\<\/TD\>)~</TD><TD class=field>E-IPS</TD></TR>

Совсем не то что хотелось.
 
Можно отдельной веткой искать регулярное выражение, потом вставить результат этой ветки в "Что заменять" и в "Чем заменять" с добавлением необходимого текста.
К сожалению не уловил идеи, можете разжевать для новичка?
 
К сожалению не уловил идеи, можете разжевать для новичка?
Делаем дополнительный шаг, в котором будет браться значение по регулярному выражению. Дальше результат выполнения этого шага вставить в поля "Что заменять" и в "Чем заменять" с добавлением необходимого текста во втором. Таким образом во втором поле "На что заменять" будет стоять не регулярка, как показал Степ, а текстовое значение, на которое необходимо заменить.
 
  • Спасибо
Реакции: sergeda
Делаем дополнительный шаг, в котором будет браться значение по регулярному выражению. Дальше результат выполнения этого шага вставить в поля "Что заменять" и в "Чем заменять" с добавлением необходимого текста во втором. Таким образом во втором поле "На что заменять" будет стоять не регулярка, как показал Степ, а текстовое значение, на которое необходимо заменить.

Ааа, понял, все гениальное просто :) Хотя конечно если бы программа позволяла сразу к результату регулярки обращаться, было бы красивей.
Большое спасибо.
 
К сожалению рано радовался, данный способ наверное сработал бы если бы регулярка возвращала только одно совпадение, а так как она несколько возвращает то не работает такой маневр :(
 
Дело в том, что макрос замены по регулярному выражению заменяет все найденные совпадения. В данном случае, если надо поменять только 1 совпадение, необходимо подобрать регулярку точно под это совпадение. Если же регулярка выдает несколько совпадений, но текст выдается разный, то можно к регулярному выражению приписать (?<=\<TD class\=title\>).*?(?=\<\/TD\>)-|-1 Где 1 - это № регулярного выражения
 
Мне надо все совпадения в тексте окружить символами. Я попробовал через -all- получить все совпадения а на следующем шаге как Вы сказали
Дальше результат выполнения этого шага вставить в поля "Что заменять" и в "Чем заменять" с добавлением необходимого текста во втором.
Но не сработало. Видимо из-за того что результатом являлась не просто строка а набор строк. Похоже как ни крути надо циклом проходится построчно. Ограничена работа с регулярками в программе, много лишних движений из-за этого. Нельзя регуляркой вернуть несколько значений типа [Не надо] [Надо] [Не надо] [Надо], нельзя в замене обратится к результату регулярки. В этом плане TextPipe или PHP помощнее будут. Но хотелось обойтись без них.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)