Русское сообщество AutoIt

  • Май 18, 2013, 18:13:50 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:


Последняя финальная версия AutoIt: 3.3.8.1 (Скачать)
Последняя Beta версия AutoIt: 3.3.9.4 (Скачать)

Реклама

Автор Тема: [RegExp] Использование Non-capturing group  (Прочитано 1484 раз)

0 Пользователей и 1 Гость смотрят эту тему.

r35p3ct [?]

Гуру, помогите разобраться, при захвате строки, нужно получить 1 элемент массива, без <asd>.
По справке вроде должно выполняться через (?: ... ), но что не работает.

Код: AutoIt [Выделить]
; <td>aaa <asd>bbb</td> ; Нужно получить aaa bbb
; <td>aaa<asd>bbb</td>
; <td>aaa <asd></td>
$ret=StringRegExp(ClipGet(),'(?s)<td>(.*(?:<asd>).*)</td>',3)
_ArrayDisplay($ret)
 
« Последнее редактирование: Ноябрь 07, 2010, 21:52:08 от r35p3ct »



  Записан

dwerf [?]

  • AutoIt Гуру
  • *****
  • Репутация: 209
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 478
  • Использует ArchLinux
    • Награды
Re: [RegExp] Использование Non-capturing group
« Ответ #1, Отправлен: Ноябрь 07, 2010, 22:15:00 »
По справке вроде должно выполняться через (?: ... ), но что не работает.
Выдаётся всё содержимое группы.
Non-capturing group может пригодится, если на пример какаято строка может несколько раз повторяться.

У меня получился такой вот полубред, имхо проще StringReplace изпользовать.

Код: AutoIt [Выделить]
#include <Array.au3>

$sString = '; <td>aaa <asd>bbb</td> ; Нужно получить aaa bbb' & @CRLF & _
           '; <td>ccc<asd>ddd</td>' & @CRLF & _
           '; <td>fff <asd></td>'
$ret=StringRegExp(StringRegExpReplace($sString,'(?s)<td>(.*?)<asd>(.*?)</td>', '<tdasd>$1$2</tdasd>'), '(?s)<tdasd>(.*?)</tdasd>', 3)
_ArrayDisplay($ret)




  Записан
00110110001000001101000011010011001

r35p3ct [?]

  • Продвинутый
  • ***

  • Автор темы
  • Репутация: 59
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 222
    • Награды
Re: [RegExp] Использование Non-capturing group
« Ответ #2, Отправлен: Ноябрь 07, 2010, 22:50:32 »
Это все понятно, проще  тогда так:
Код: AutoIt [Выделить]
$ret=StringRegExp(ClipGet(),'(?s)<td>(.+)(?:<asd>)(.*?)</td>',3)
 
Вопрос именно в том, возможно ли получить в одну переменную и без лишних манипуляций.




  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1941
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 6233
  • Версия AutoIt: 3.3.8.1
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Re: [RegExp] Использование Non-capturing group
« Ответ #3, Отправлен: Ноябрь 08, 2010, 00:43:27 »
r35p3ct  [?]
Цитата
По справке вроде должно выполняться через (?: ... ), но что не работает
Всё работает. Эта “не захвачиваемая” группа попадает в захвачиваемую, поэтому эффекта никакого. Нужно делать так, раз уж попутные символы (которые не нужно захвачивать) известны:

Код: AutoIt [Выделить]
$ret = StringRegExpReplace(ClipGet(), '(?s).*?<td>(.*?)<asd>(.*?)</td>.*?', '\1\2' & @LF)
ConsoleWrite($ret & @LF)

Но это конечно не решает проблемы, я понял что требуется, но мне кажется такой захват не поддерживается, так просто “перескочить” через символы в захватывающей группе не получится. Буду рад ошибаться.




  Записан
Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.

   Онлайн видео!

«Не оказываю техподдержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
[RegExp] Использование захватывающей группы только в приделах выражения
Регулярные выражения и прочее
CreatoR 9 2163 Последний ответ Апрель 10, 2010, 14:35:30
от amel27
[Автоматизация] Использование автокликера в MMO(фоновым окном)
AutoIt для новичков
winstan 2 3380 Последний ответ Июнь 14, 2010, 09:41:05
от winstan
Использование собственной функции с переменным числом аргументов
AutoIt для новичков
white[43] 6 998 Последний ответ Февраль 03, 2012, 13:50:33
от white[43]
[RegExp] Как заставить RegExp обрабатывать переносы строк выборочно?
Регулярные выражения и прочее
Medic84 3 927 Последний ответ Март 25, 2012, 01:22:03
от asdf8
Использование зашифрованного файла .bmp для ImageSearchDLL
AutoIt для новичков
iamOmg 4 654 Последний ответ Апрель 25, 2012, 16:44:59
от iamOmg
Использование _IELinkClickByText на ссылках с пробелами и спец.символами
Автоматизация IE и Web-интерфейса
unauthorized 6 1039 Последний ответ Апрель 27, 2012, 20:30:35
от Garrett
Посоветуйте, где можно почитать про Jscript и его использование с ИЕ8 ?
Автоматизация IE и Web-интерфейса
s1on 1 492 Последний ответ Июнь 06, 2012, 19:18:25
от madmasles
Использование переменных данных в шаблонах поиска RegExp
Автоматизация IE и Web-интерфейса
Danlong 2 517 Последний ответ Июнь 11, 2012, 12:17:04
от Danlong
[RegExp] Конвертация RegExp из VBScript в Autoit
Регулярные выражения и прочее
warezoogle3 14 1766 Последний ответ Июль 03, 2012, 00:48:36
от Garrett
[RegExp] Правильное использование символа исключения
Регулярные выражения и прочее
dimas1221 3 241 Последний ответ Май 07, 2013, 08:14:36
от dimas1221


Реклама