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

sergeda

Client
Регистрация
15.09.2011
Сообщения
294
Благодарностей
16
Баллы
18
Всем привет.
Подскажите как в макросе замены регуляркой можно в поле "На что заменять" вывести результат совпадения регулярки?
То есть хочу найти текст и с помощью макроса замены регуляркой вставить его же но с добавлением символов.
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
Можно отдельной веткой искать регулярное выражение, потом вставить результат этой ветки в "Что заменять" и в "Чем заменять" с добавлением необходимого текста.
 

step85

Client
Регистрация
19.02.2010
Сообщения
1 839
Благодарностей
287
Баллы
83
в оба поля ставьте одну и туже регулярку. Но только во втором поле (на что заменять?) добавьте к регулярке нужные вам символы
 

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

Client
Регистрация
15.09.2011
Сообщения
294
Благодарностей
16
Баллы
18
Можно отдельной веткой искать регулярное выражение, потом вставить результат этой ветки в "Что заменять" и в "Чем заменять" с добавлением необходимого текста.
К сожалению не уловил идеи, можете разжевать для новичка?
 

ZennoScript

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

sergeda

Client
Регистрация
15.09.2011
Сообщения
294
Благодарностей
16
Баллы
18
Делаем дополнительный шаг, в котором будет браться значение по регулярному выражению. Дальше результат выполнения этого шага вставить в поля "Что заменять" и в "Чем заменять" с добавлением необходимого текста во втором. Таким образом во втором поле "На что заменять" будет стоять не регулярка, как показал Степ, а текстовое значение, на которое необходимо заменить.
Ааа, понял, все гениальное просто :-) Хотя конечно если бы программа позволяла сразу к результату регулярки обращаться, было бы красивей.
Большое спасибо.
 

sergeda

Client
Регистрация
15.09.2011
Сообщения
294
Благодарностей
16
Баллы
18
К сожалению рано радовался, данный способ наверное сработал бы если бы регулярка возвращала только одно совпадение, а так как она несколько возвращает то не работает такой маневр :(
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
Дело в том, что макрос замены по регулярному выражению заменяет все найденные совпадения. В данном случае, если надо поменять только 1 совпадение, необходимо подобрать регулярку точно под это совпадение. Если же регулярка выдает несколько совпадений, но текст выдается разный, то можно к регулярному выражению приписать (?<=\<TD class\=title\>).*?(?=\<\/TD\>)-|-1 Где 1 - это № регулярного выражения
 

sergeda

Client
Регистрация
15.09.2011
Сообщения
294
Благодарностей
16
Баллы
18
Мне надо все совпадения в тексте окружить символами. Я попробовал через -all- получить все совпадения а на следующем шаге как Вы сказали
Дальше результат выполнения этого шага вставить в поля "Что заменять" и в "Чем заменять" с добавлением необходимого текста во втором.
Но не сработало. Видимо из-за того что результатом являлась не просто строка а набор строк. Похоже как ни крути надо циклом проходится построчно. Ограничена работа с регулярками в программе, много лишних движений из-за этого. Нельзя регуляркой вернуть несколько значений типа [Не надо] [Надо] [Не надо] [Надо], нельзя в замене обратится к результату регулярки. В этом плане TextPipe или PHP помощнее будут. Но хотелось обойтись без них.
 

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