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

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

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

Новости:


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

Реклама

Автор Тема: [RegExp] Использование захватывающей группы только в приделах выражения  (Прочитано 2164 раз)

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

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1941
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 6233
  • Версия AutoIt: 3.3.8.1
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Вопрос довольно простой - каким образом можно указать выражению использовать захватывающую группу только в пределах этого самого выражения?

Т.е по сути мне нужно чтобы в выражений захватывающую группу можно было использовать, а в замене - нет.

Пример:
Код: AutoIt [Выделить]
StringRegExpReplace($vTest, '<(?:\w+)>(.*?)</\1>', '\1')

Тут в выражений «\1» мне нужен для поиска парного тега, однако мне не нужно чтобы оно попадало в строку при замене.




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


AutoIt is simple, subtle, elegant.

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

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


Мои работы

amel27 [?]

может так?

Код: AutoIt [Выделить]
StringRegExpReplace($vTest, '<(\w+)>(.*?)</\1>', '\2')




  Записан

CreatoR [?]

  • Администратор
  • *
  • *****

  • Автор темы
  • Репутация: 1941
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 6233
  • Версия AutoIt: 3.3.8.1
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
amel27  [?]
Цитата
может так?
Интересно. Получается что замена происходит только для той группы, которая используется?
Тогда почему так не работает:

Цитата
$vTest = '5 {5} 5 {6} 6'

$sRet = StringRegExpReplace($vTest, '({)(.*)(})', '\2')

ConsoleWrite($sRet & @LF)

Понял, искать нужно всё кроме открывающей скобки:
Код: AutoIt [Выделить]
$sRet = StringRegExpReplace($vTest, '({)([^{]*)(})', '\2')
и к данной теме оно отношения конечно не имеет :whistle:




  Записан

amel27 [?]

или так:

Код: AutoIt [Выделить]
StringRegExpReplace($vTest, '({)(.*?)(})', '\2')

хотя исключающий класс лучше




  Записан

CreatoR [?]

  • Администратор
  • *
  • *****

  • Автор темы
  • Репутация: 1941
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 6233
  • Версия AutoIt: 3.3.8.1
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Вот наконец наткнулся на тот пример, где это больше всего проявляется:

Код: AutoIt [Выделить]
$vTest = '"String Line 1"' & @CRLF & "'String Line 2'"

$sRet = StringRegExp($vTest, '(?s).*?(("|'')[^\2]*\2).*?', 3)

тут хотелось бы в массив получить строчки которые заключены в кавычки (одиночные и двойные), сами кавычки в массиве мне не нужны.




  Записан

amel27 [?]

хотелось бы в массив получить строчки которые заключены в кавычки (одиночные и двойные), сами кавычки в массиве мне не нужны.

Так это уже совсем другая задача. AFAIK StringRegExp не поддерживает вывод в массив только определенных сохранений - он всегда выводит ВСЕ сохранения... но ИМХО это всё эстетика, т.к. пропустить служебные сохранения в цикле обхода массива не проблема, установив в цикле For/Next значение Step

З.Ы. у тебя повторяется одна и та же ошибка: паттерн типа "[^\2]" недопустим по двум причинам:

- это класс исключаемых символов, а не исключаемая строка;
- классы не поддерживают сохранений, т.е. являются статическими, а "[^\2]*" равнозначно ".*"




  Записан

CreatoR [?]

  • Администратор
  • *
  • *****

  • Автор темы
  • Репутация: 1941
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 6233
  • Версия AutoIt: 3.3.8.1
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
amel27  [?]
Цитата
Так это уже совсем другая задача
Ну почему, как раз таже - нужно исключить из глобальной замены группы, которые используются в самом выражений.


Цитата
StringRegExp не поддерживает вывод в массив только определенных сохранений - он всегда выводит ВСЕ сохранения
Вот что и требовалось доказать, мне значит нужно то, чего StringRegExp не поддерживает :).

Цитата
пропустить служебные сохранения в цикле обхода массива не проблема, установив в цикле For/Next значение Step
Я так и сделал, через Step 2 :) - но это замедляет процесс замены.

Цитата
классы не поддерживают сохранений, т.е. являются статическими, а "[^\2]*" равнозначно ".*"
«.*» ищет всё что угодно, а мне нужно чтобы он искал всё, кроме совпадения (первой найденной) кавычки. Хотя может оно действительно ищет тоже самое, т.к на конце я всё равно указываю кавычку.




  Записан

amel27 [?]

но это замедляет процесс замены
с чего бы?..  :-\




  Записан

CreatoR [?]

  • Администратор
  • *
  • *****

  • Автор темы
  • Репутация: 1941
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 6233
  • Версия AutoIt: 3.3.8.1
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
amel27  [?]
Цитата
с чего бы?
Из за дополнительного цикла.




  Записан

amel27 [?]

я к тому, что если StringRegExp запускать, то массив всё равно придется обходить в цикле, а от значения STEP=1 или 2 скорость обхода не изменится




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
 Закреплено  Группы пользователей
О проекте и форуме
CreatoR 0 3133 Последний ответ Июль 19, 2009, 10:59:09
от CreatoR
[RegExp] Игнорирование группы символов в наборе при замене
Регулярные выражения и прочее
CreatoR 2 2017 Последний ответ Август 13, 2010, 19:08:52
от CreatoR
[RegExp] Использование Non-capturing group
Регулярные выражения и прочее
r35p3ct 3 1484 Последний ответ Ноябрь 08, 2010, 00:43:27
от CreatoR
Можно ли в одном gui-окне создавать отдельные группы с GUICtrlCreateRadio ?
AutoIt для новичков
agikon 3 805 Последний ответ Сентябрь 30, 2011, 12:24:22
от agikon
поиск группы точек через PixelSearch()
AutoIt для новичков
MadMNN 2 907 Последний ответ Ноябрь 19, 2011, 13:22:25
от MadMNN
как получить строку по имени группы и найти в ней определённый ряд
AutoIt для новичков
running-frag 4 556 Последний ответ Февраль 17, 2012, 20:22:00
от running-frag
Использование переменных данных в шаблонах поиска RegExp
Автоматизация IE и Web-интерфейса
Danlong 2 517 Последний ответ Июнь 11, 2012, 12:17:04
от Danlong
Помогите нарисовать иконку для группы
Общение
Belfigor 5 333 Последний ответ Март 03, 2013, 18:23:22
от Belfigor
Пополнение группы Глобальных модераторов...
О проекте и форуме
CreatoR 5 342 Последний ответ Апрель 09, 2013, 20:07:34
от madmasles
[RegExp] Правильное использование символа исключения
Регулярные выражения и прочее
dimas1221 3 243 Последний ответ Май 07, 2013, 08:14:36
от dimas1221


Реклама