Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » StringRegExp - как получить содержимое между 2-мя строками

Ответить
Настройки темы
StringRegExp - как получить содержимое между 2-мя строками

Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


Изменения
Автор: evg64
Дата: 05-12-2009
Добрый день! Есть вопрос по тому, как вычленить содержимое между 2-мя строками. Все может выглядеть либо так:
Код: Выделить весь код
<SPAN class='columnValue'>искомое значение</SPAN> (случай 1)
Либо так:
Код: Выделить весь код
<SPAN class='columnValue'>
все
это
является
искомым
значением
</SPAN> (случай 2)
Либо так:
Код: Выделить весь код
<SPAN class='columnValue'>искомое значение
</SPAN> (случай 3)
Пытаюсь получить искомые значения функцией StringRegExp (исходная строка для поиска регулярных выражений содержится в буфере обмена):
Код: Выделить весь код
#Include <Array.au3>
$aRegExpValue = StringRegExp(clipget(), "<SPAN class='columnValue'>(.*?)\r?\n?</SPAN>", 3)
_ArrayDisplay($aRegExpValue)
Проблема в том, что функция находит лишь регулярные выражения из случая 1 (то есть <SPAN class='columnValue'>искомое значение</SPAN>).
Если </SPAN> перенесен хотя бы на одну строку вниз по сравнению с 1-й частью рег выражения, то совпадений не обнаруживается. Даже несмотря на то, что написано "\r?\n?". Как сделать так, чтобы функция возвращала совпадения из всех 3-х случаев?
P.S. Вопрос имеет лишь косвенное отношение к AutoIt, за это сори, однако спросить на этом форуме мне удобнее и быстрее всего

Отправлено: 00:29, 05-12-2009

 

Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


Разобрался сам Надо было делать так:
Код: Выделить весь код
#Include <Array.au3>
$aRegExpValue = StringRegExp(clipget(), "<SPAN class='columnValue'>((?s).*?)</SPAN>", 3)
_ArrayDisplay($aRegExpValue)

Отправлено: 01:19, 05-12-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Слишком общее название темы - такие вопросы появляются часто, поэтому тему можно было бы назвать например так: «StringRegExp - как получить содержимое между 2-мя строками»

Цитата evg64:
Если </SPAN> перенесен хотя бы на одну строку вниз по сравнению с 1-й частью рег выражения, то совпадений не обнаруживается. »
Это потому что для служебного символа «.» который ищет любой другой символ, нужно задать режим совпадения любого символа включая новую строку...

Код: Выделить весь код
#Include <Array.au3>
$aRegExpValue = StringRegExp(ClipGet(), "(?s)<SPAN class='columnValue'>(?:\s?)+(.*?)(?:\s?)+</SPAN>", 3)
_ArrayDisplay($aRegExpValue)
Этот вариант будет удалять ведущие и завершающие символы пробелов (любые), если это не требуется, то из шаблона нужно убрать оба совпадения (?:\s?)+.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 01:19, 05-12-2009 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » StringRegExp - как получить содержимое между 2-мя строками

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как посмотреть содержимое папки на сайте? QUMATOZ Вебмастеру 12 10-07-2013 02:12
Какое событие соответствует перемещению между строками ListView malev AutoIt 2 22-10-2009 15:32
[решено] Не работает StringRegExp для строк с {Enter}. Как бытЬ? Twix1124 AutoIt 2 25-07-2009 22:16
Win32 API - [решено] [C++] Как программно обновить содержимое окна Drongo Программирование и базы данных 8 31-03-2009 01:47
Как посмотреть содержимое cd в FreeBSD Guest Программное обеспечение Linux и FreeBSD 16 13-03-2004 13:30




 
Переход