ZebroidФорумПубличный разделВопросыРегулярные выражения не правильно работают

Регулярные выражения не правильно работают

03 октября 2012, 00:22
Зарегистрирован: 31 марта 2012, 14:16
Не удается реализовать многие конструкции в Zebroid, которые отлично работают, например в Notepad++.

К примеру, приведу следующую задачу:

Например нужно удалить все абзацы (<p>) содержащие лишнее слово, не само слово а именно абзацы, которые в свою очередь содержат внутри теги форматирования.

Вот сама конструкция: <p[^>]*>.*Лишнее слово.*</p> заменить на «» - Пустую строку

В Notepad++ она отлично работает, а в зеброиде полностью удаляет статью содержащею это слово.

Пробовал также «не жадный» режим: <p[^>]*?>.*?Лишнее слово.*?</p> - результат тот же самый.

Хотелось бы что еще работали конструкции «Просмотр вперёд и назад»

(?=шаблон)- Позитивный просмотр вперёд

(?!шаблон)- Негативный просмотр вперёд (с отрицанием)

(?<=шаблон)- Позитивный просмотр назад

(?<!шаблон)- Негативный просмотр назад (с отрицанием)



03 октября 2012, 03:59
Зарегистрирован: 10 апреля 2012, 00:00
Не удается реализовать многие конструкции в Zebroid, которые отлично работают, например в Notepad++.

К примеру, приведу следующую задачу:

Например нужно удалить все абзацы (<p>) содержащие лишнее слово, не само слово а именно абзацы, которые в свою очередь содержат внутри теги форматирования.

Вот сама конструкция: <p[^>]*>.*Лишнее слово.*</p> заменить на «» - Пустую строку

В Notepad++ она отлично работает, а в зеброиде полностью удаляет статью содержащею это слово.

Пробовал также «не жадный» режим: <p[^>]*?>.*?Лишнее слово.*?</p> - результат тот же самый.



Notepad++ не самый удачный пример, потому что как раз таки он и работает своеобразно, а Зеброид работает правильно и в точности поддерживает синтаксис Perl (единственное, что некоторые моддификаторы по умолчанию стоят не так, как принято, но и это отключается в настройках). Показывайте тексты на которых тестировали, будем разом определять что правильно, а что нет

Хотелось бы что еще работали конструкции «Просмотр вперёд и назад»

(?=шаблон)- Позитивный просмотр вперёд

(?!шаблон)- Негативный просмотр вперёд (с отрицанием)

(?<=шаблон)- Позитивный просмотр назад

(?<!шаблон)- Негативный просмотр назад (с отрицанием)


Все возможности регулярных выражений Perl прекрасно поддерживаются, включая и эти.



03 октября 2012, 14:37
Зарегистрирован: 31 марта 2012, 14:16
Показываю текст на котором тестировал, из каждого текста нужно удалить абзацы, содержащие «ключевое слово». В данном тексте они находятся в двух последних абзацах.

Применял регулярные выражения с заменой на пустую строку:

<p[^>]*>.*Ключевое слово.*</p>

<p[^>]*?>.*?Ключевое слово.*?</p>

На входе:

[spoiler:dfxn5khm]<h1>Заголовок</h1>

<p style="margin-bottom: 0cm; text-align: justify;"><img src="Картинка" border="0" style="float: left;" />Текст текст текст текст текст текст текст текст текст <i>текст текст</i> текст текст текст текст текст текст текст текст <strong>текст</strong> текст текст текст текст текст текст текст <a href="#" title="Ссылка">Ссылка</a> текст текст текст текст текст текст текст текст текст текст текст текст.</p>

<p style="margin-bottom: 0cm; text-align: justify;">Текст текст текст текст текст текст текст текст текст <b>текст</b> текст текст текст текст текст <b>текст</b> текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст.</p>

<p style="margin-bottom: 0cm; text-align: justify;">Текст текст текст <i>текст текст</i> текст текст текст текст <strong>текст</strong> текст текст текст текст текст текст текст <i>текст текст</i> текст текст текст текст <strong>текст</strong> текст текст текст текст текст текст текст текст текст текст текст <b>текст</b> текст текст текст <i>текст текст</i> текст текст.</p>

<p style="margin-bottom: 0cm; text-align: justify;">Текст текст текст текст текст текст текст текст текст текст текст текст текст текст <b>текст</b> текст текст текст текст текст текст текст текст <a href="#" title="Ссылка">Ссылка</a> текст текст текст текст текст текст текст текст текст текст текст текст текст текст.</p>

<p style="margin-bottom: 0cm; text-align: justify;"><a href="#" title="Ссылка">Ссылка</a> текст текст текст <i>текст текст</i> текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст Ключевое слово текст текст текст <b>текст</b> текст текст текст текст текст текст текст текст <strong>текст</strong> текст текст текст текст текст текст.</p>

<p style="margin-bottom: 0cm; text-align: justify;">Текст текст <strong>текст</strong> текст текст текст текст текст <b>текст</b> текст текст текст "Ключевое слово" текст текст <i>текст текст</i> текст текст текст текст <strong>текст</strong> текст текст текст текст текст текст текст текст текст текст текст <b>Ключевое слово</b> текст текст текст текст текст текст текст текст текст.</p>[/spoiler:dfxn5khm]

На выходе (нужно получить!):

[spoiler:dfxn5khm]<h1>Заголовок</h1>

<p style="margin-bottom: 0cm; text-align: justify;"><img src="Картинка" border="0" style="float: left;" />Текст текст текст текст текст текст текст текст текст <i>текст текст</i> текст текст текст текст текст текст текст текст <strong>текст</strong> текст текст текст текст текст текст текст <a href="#" title="Ссылка">Ссылка</a> текст текст текст текст текст текст текст текст текст текст текст текст.</p>

<p style="margin-bottom: 0cm; text-align: justify;">Текст текст текст текст текст текст текст текст текст <b>текст</b> текст текст текст текст текст <b>текст</b> текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст.</p>

<p style="margin-bottom: 0cm; text-align: justify;">Текст текст текст <i>текст текст</i> текст текст текст текст <strong>текст</strong> текст текст текст текст текст текст текст <i>текст текст</i> текст текст текст текст <strong>текст</strong> текст текст текст текст текст текст текст текст текст текст текст <b>текст</b> текст текст текст <i>текст текст</i> текст текст.</p>

<p style="margin-bottom: 0cm; text-align: justify;">Текст текст текст текст текст текст текст текст текст текст текст текст текст текст <b>текст</b> текст текст текст текст текст текст текст текст <a href="#" title="Ссылка">Ссылка</a> текст текст текст текст текст текст текст текст текст текст текст текст текст текст.</p>[/spoiler:dfxn5khm]

Что получаем в результате:

[spoiler:dfxn5khm]<h1>Заголовок</h1>[/spoiler:dfxn5khm]



04 октября 2012, 05:43
Зарегистрирован: 10 апреля 2012, 00:00
Заходим в настройки, отключаем опцию "Выключить стандартные модификаторы в регулярных выражениях", проверяем еще раз



04 октября 2012, 19:36
Зарегистрирован: 31 марта 2012, 14:16
Что с включенной настройкой "Выключить стандартные модификаторы в регулярных выражениях", что с выключенной, результат один и тот же…



05 октября 2012, 03:02
Зарегистрирован: 10 апреля 2012, 00:00
Что с включенной настройкой "Выключить стандартные модификаторы в регулярных выражениях", что с выключенной, результат один и тот же…


Так и есть, исправлю, спасибо.