Jonmey
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Aleksandr N Что вам мешает использовать строку поиска как есть, без ненужной в данном случае городьбы с продвинутыми регэкспами? У вас задача - составить минимальную, желатеьно литеральную строку поиска, которая уникальна только для искомых строк и все. Это html - в нем возможны мельчайшие изменения - доп. пробелы, переводы строк, табы и т.д., которые, появившись, сделают навороченный регэксп неработоспособным и при этом корректировать его будет весьма непросто. Правило в html - использовать регэкспы с минимально возможным количеством регэкпа. Согласно вам, вы ищите <tr style="display:none"><td class=drug><a href=doc_1.htm><b class=b>[^<]*</a></td><td class=firm><a href=11.htm><b>Текст</b></a></td></tr> где синее - ключевой тег для замены красное - переменные строки Ну и заменяйте переменные куски на [^<>]*, и все это неключевое - в скобки () - будет переменной - \1 или $1 в зависимости от синтаксиса редактора: <tr style="display:none">(<td class=drug><a href=[^<>]*><b class=b>[^<]*</a></td><td class=firm><a href=[^<>]*><b>[^<>]*</b></a></td></tr>) заменить на <tr style="display:block">\1 или <tr style="display:block">$1 Мне кажется, этот путь проще и надежнее, чем ждать у моря погоды и спотыкаться о каждый символ, не зная как изменить регэксп. Добавлено: Если нужны конкретные подстроки на месте переменных вида [^<>]* то, в зависимости от задачи можно вставить искомое напрямую (в том числе через альтернативу (1|3|9)\.html - явный вид; (1|3|9) - три варианта возможной цифры (1|3|9)[^>]* - неявный вид, но с обязательным первым символом или разбить это (или эти) выражение на подстроки Напр, нужно подстроку вида цифры(1|3|9)цифры_и буквы.html \d*(1|3|9)\d*[^\.>]*\.html и т.д. Таким образом получится целевое выражение, например для doc_(0 или более цифр)5(0 или более цифр).htm (doc_5.htm, doc_95.htm, doc_3351.htm и т.д.) для примера ниже: <tr style="display:none">(<td class=drug><a href=doc_\d*5\d*\.htm><b class=b>[^<]*</b>[^<]*</a></td><td class=firm [^>]*>(<i>)?[^<]*(</i>)? *<a href=[^<>]*>(<b>)?[^<>]*(</b>)?</a></td></tr>) заменить на <tr style="display:block">\1 или <tr style="display:block">$1 То, есть вся задача разбивается на 2 подзадачки - составление общей уникальной строки (выше описано) - составление подстрок, если они должны иметь конкретные известные элементы (цифры, буквы, сочетания и тд) То есть, задача, по сути тривиальная. Добавлено2: Но поскольку задача ИЗНАЧАЛЬНО сформулирована некорректно, то конкретно данном случае (практически табличного представления данных, где уникальность строк сама по себе высокая и балластного кода мало) она состоит в поиске и замене подстрок в тех строках, которые содержат другую подстроку. [Подстрока_для_замены][символыА][подстрока-условие-замены][символыB] Поскольку строка достаточно длинна, символыВ можно не рассматривать. Необходимо только чтобы подстрока-условие-замены не была ни с чем перепутана в оставшейся подстроке (условие уникальности). В простейшем случае (когда нужно присутствие 5 в текстовом поле) это так: <tr style="display:none">(<td class=drug><a href=[^<>]*><b class=b>[^<>5]*5) заменить на <tr style="display:block">\1 или <tr style="display:block">$1 | Всего записей: 1365 | Зарегистр. 17-01-2011 | Отправлено: 16:28 29-02-2020 | Исправлено: Jonmey, 19:55 29-02-2020 |
|