101 (изменено: teadrinker, 2018-10-08 18:30:42)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Или так:


list =
(Join`r`n
# Список

On
    BaseType "тип"
    SetBorderColor 74 0 160
    SetFontSize 30
   
On
    BaseType "тип1" "Тип2" "тип3" "Тип4" "тип-другое"
    SetTextColor 255 200 0
    SetBackgroundColor 127 127 127
   
Off
    Count >= 30
    BaseType "Type"
    SetTextColor 197 255 23
    SetBackgroundColor 255 255 255 0
    SetBorderColor 255 255 255 0
    SetFontSize 25
On
    Class "Item Class" "Класс предмета"
    SetTextColor 197 255 23
    SetBackgroundColor 0 0 0 0
    SetBorderColor 197 255 23
    SetFontSize 25
)

while RegExMatch(list, "sO)\R\K(On|Off).*?(?=\R+(?1)|$)", match, match ? match.Pos + match.Len : 1)
	MsgBox, % "|" match[0] "|"
 
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

102

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Здравствуйте.
Не подскажите можно ли в AHK сделать инверсию (все кроме) поиска?
Просто необходимо пройтись регулями по html, который лежит в текстовом (txt) файле в одну строку, html помещается в переменную html_data с помощью FileReadLine.  Отошел от сути вопроса...

Суть в том что не понимаю можно ли в AHK сделать так что бы он нашел все кроме определенного шаблона? Сейчас под рукой нет html_data, поэтому попробую показать на примере. (Что нашел)

Хочу понять как сделать так что бы регули удали все что не похоже по шаблону вот на это:
Оригинал:

<span class="right-rates-sum" data-reactid=".7.3.1.0">210.42</span>

Шаблон:

html_data:=RegExReplace("<span class=.right-rates-sum. data-reactid=.*?>.*</span>", " ")

Можно как-нибудь сделать исключение/инверсию для этого шаблона? Удалить все кроме данного шаблона.

103

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Непонятно описано. Хотите получить значения из строки?


str = <span class="right-rates-sum" data-reactid=".7.3.1.0">210.42</span>
RegExMatch(str,"data-reactid=""([\d\.]+)"">([\d\.]+)", match)
MsgBox % "data-reactid = " match1 "`nspan-text = " match2

104 (изменено: romzes96, 2019-01-10 19:24:25)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

KusochekDobra нет. Хочу получить все сходства с шаблоном, а остальное удалить.

Шаблон: (ранее была ошибка)

html_data:=RegExReplace(html_data, "<span class=.right-rates-sum. data-reactid=.*?>.*</span>", " ")

В html_data лежит большой html страницы из которого нужно получить только шаблон и его вариации, так как после числа 7 символы меняються, сначала от 1 до 0, затем от a до z, после чего складываються и снова меняються в порядке от 1a до 0z.

Но я не понял как произвести инверсию всего шаблона что-то типа (^\d) только вот так (^шаблон).  Но так просто не получается.

105

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Иными словами, в html_data, строка <span class="right-rates-sum" data-reactid=".7.3.1.0">210.42</span> встречается несколько раз, с изменёнными значениями data-reactid и содержимого тега span, а Вам, требуется получить каждую такую строку, без остального содержимого html_data. Верно?

106

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

KusochekDobra, да извините за корявое обьяснение. Сейчас я дополню смог добраться до пк.
Но да именно так.

107

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]


reg_ex = (<span class="right-rates-sum" data-reactid="[\d\w\.]+">[\d\.]+</span>)

str =
(LTrim Join`r`n
	Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
	<span class="right-rates-sum" data-reactid=".7.3.1.0">210.42</span>
	Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
	<span class="right-rates-sum" data-reactid=".7.a.1x.0">3104.2</span>
	Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
	<span class="right-rates-sum" data-reactid=".7.3y.1.c">411</span>
	Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
)

i := 1, match := result := ""
While i := RegexMatch(str, reg_ex, match, i + StrLen(match))
{
	result .= match1 "`n"
}

MsgBox % result

108 (изменено: romzes96, 2019-01-10 20:09:31)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

KusochekDobra спасибо пример написанный Вами работает но только в виде примера
Я попробовал перенести Ваш пример в свой код, и он выдает пустой MsgBox.
Вот так:
http://prntscr.com/m5g1s3

Вот html_data что я использую.
UPD:
Нененене понял сейчас перепроверю. Этот скрипт не имеет %A_ScriptDir% тут ошибка с моей стороны секунду!)
UPD2:
Всё работает спасибо большое!!!!
UPD3:
Форум не дал написать полную благодарность Но я крайне благодарен Вам за помощь постараюсь вникнуть в написанное.

109

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Или так:

pattern = <span class="right-rates-sum" data-reactid=.*?</span>

str =
(LTrim Join`r`n
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
   <span class="right-rates-sum" data-reactid=".7.3.1.0">210.42</span>
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
   <span class="right-rates-sum" data-reactid=".7.a.1x.0">3104.2</span>
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
   <span class="right-rates-sum" data-reactid=".7.3y.1.c">411</span>
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
)

MsgBox, % RegExReplace(str, "s).*?(" . pattern . ")|((?!\1).)*", "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

110 (изменено: KusochekDobra, 2019-01-11 00:30:32)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

romzes96, переменная str, в которую FileReadLine помещает текст файла, вмещает примерно треть от всего файла. Если верить FileGetSizeize, его размер 166877, в то время как str вмещает только 65535. Воспользуйтесь FileRead для этого.

Так же, span иногда содержит ещё и запятую, так что замените RegEx-шаблон на этот:

reg_ex = (<span class="right-rates-sum" data-reactid="[\d\w\.]+">[\d\.\,]+</span>)

111

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker, прокомментируйте пожалуйста, что я не правильно понимаю в Вашей предыдущей записи:

MsgBox, % RegExReplace(str, "s).*?(" . pattern . ")|((?!\1).)*", "$1")

Утверждение гласит, что если текст соответствует "pattern", то поместить его в обратную ссылку, иначе, поместить строку, которая не содержит единицу, за которой следует любой знак?

112 (изменено: teadrinker, 2019-01-11 02:18:44)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Часть паттерна до знака | ищет текст до ближайшего сабпаттерна и сам этот сабпаттерн и всё это заменяет на текст сабпаттерна. Это проделывается во всей переменной str, пока подобные конструкции находятся:

pattern = <span class="right-rates-sum" data-reactid=.*?</span>

str =
(
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
   <span class="right-rates-sum" data-reactid=".7.3.1.0">210.42</span>
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
   <span class="right-rates-sum" data-reactid=".7.a.1x.0">3104.2</span>
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
   <span class="right-rates-sum" data-reactid=".7.3y.1.c">411</span>
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
)

MsgBox, % RegExReplace(str, "s).*?(" . pattern . ")", "$1")

Вторая часть паттерна (после знака |) используется, если не найдена первая. \1 — это обратная ссылка на первый найденный подшаблон, используется только для сокращения записи, описано здесь. То-есть, вторую часть можно было бы записать, как "((?!" . pattern . ").)*". Она удаляет все символы за которыми не следует наш подшаблон.

Но проверив ещё раз, я выяснил, что перемудрил немного, достаточно:

pattern = <span class="right-rates-sum" data-reactid=.*?</span>

str =
(
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
   <span class="right-rates-sum" data-reactid=".7.3.1.0">210.42</span>
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
   <span class="right-rates-sum" data-reactid=".7.a.1x.0">3104.2</span>
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
   <span class="right-rates-sum" data-reactid=".7.3y.1.c">411</span>
   Какой-то текст ... Какой-то текст ... Какой-то текст ... Какой-то текст ... 
)

MsgBox, % RegExReplace(str, "s).*?(" . pattern . ")|.*", "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

113

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:

Она удаляет все символы за которыми не следует наш подшаблон.

На самом деле не совсем так. Если точнее, в этой части весь текст заменяется на текст найденного в ней подшаблона, но так как в ней этого текста нет, заменяется на пустоту.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

114

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Как полезно иногда справку почитать.
Ещё интересное решение:


Global result := "", counter := 1
reg_ex = (<span class="right-rates-sum" data-reactid="[\d\w\.]+">[\d\.\,]+</span>)(?CMatchMe)

FileRead, str, html_data.txt
RegExMatch(str, reg_ex)
MsgBox % result

MatchMe(m) {
	result .= counter++ ". - " m1 "`n"
	Return 1
}

115

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Шаблон поиска в скобки брать необязательно.

116

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Global result := "", counter := 1
reg_ex = <span class="right-rates-sum" data-reactid="[\d\w\.]+">[\d\.\,]+</span>(?CMatchMe)

FileRead, str, html_data.txt
RegExMatch(str, reg_ex)
MsgBox % result

ExitApp
MatchMe(m) {
	result .= counter++ ". - " m "`n"
	Return 1
}

117 (изменено: kamelotto, 2019-12-13 06:10:27)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Уф-ф! Ковыряюсь в "регулярках". Застрял. В справке решения не нашёл.
Задача:

Str = <-1-><-2-><-3->ИскомоеМесто!<-4-><<-5->>TEXT-2<:-6-:>Ёмаё<'-7-'>

Pos = % RegExMatch(Str, "(.+)(?<=>)([^<].+?[^>])(?=<)", Substr)

MsgBox, %Substr%

Вот вывод МС-Бокса:
---------------------------
<-1-><-2-><-3->ИскомоеМесто!<-4-><<-5->>TEXT-2<:-6-:>Ёмаё
---------------------------
Дело в том, что RegExMatch() находит все совпадения с шаблоном, а нужно только первое.
Как ограничить RegExReplace(), я уже понял. Там есть параметр Limit = -1. Но в RegExMatch(), нет такого параметра. Как его останавливать? В опциях тоже ничего такого не нашёл. Остаётся только как то подправить само выражение. Если есть ещё варианты, подскажите.
Надо остановить поиск, после восклицательного знака. Что бы получилось:

Substr = <-1-><-2-><-3->ИскомоеМесто!

118

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto, U) в начале.

119

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Phoenixxx_Czar
Дык я и U) в начале пробовал. Я же написал — "В опциях тоже ничего такого не нашёл."
Вот код с U) в начале:

Str =<-1-><-2-><-3->ИскомоеМесто!<-4-><<-5->>TEXT-2<:-6-:>Ёмаё<'-7-'>

Pos = % RegExMatch(Str, "U)(.+)(?<=>)([^<].+?[^>])(?=<)", Substr)

MsgBox, %Substr%

А вот вывод МсБокса:
---------------------------
<-1-><-2-><-3->ИскомоеМесто!<-4-><<-5->>TEXT-2<:-6-:>Ёмаё
---------------------------

120

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto, начните с изучения знака присвоения. В AHK это := а не = %.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

121

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

Уф-ф! Ковыряюсь в "регулярках". Застрял. В справке решения не нашёл.
...
Дело в том, что RegExMatch() находит все совпадения с шаблоном, а нужно только первое.

Почитайте обновлённую статью по RegExMatch().
Там имеется Match Object. Он запоминает все совпадения, остаётся только взять первое из них.

122

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu, ну здесь это не особо нужно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

123

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker
Если = %  — ошибка, почему этот код работает? И в чём разница?

124 (изменено: kamelotto, 2019-12-14 03:36:44)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker
Что вы имеете ввиду? Не особо нужна статья по RegExMatch()? Или не особо нужно использовать Match Object?
Хотелось бы знать разные подходы, для понимания широты возможностей.

125

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

Если = %  — ошибка, почему этот код работает? И в чём разница?

Это не то чтобы ошибка, а просто бессмысленное использование недокументированного поведения. Зачем писать = %, если есть := ? Тем более, если выкладываете скрипт на форуме. Он ведь не только вам должен быть понятен, поэтому лучше использовать обычный синтаксис.

kamelotto пишет:

Или не особо нужно использовать Match Object?

Да, без него можно обойтись.

Str = <-1-><-2-><-3->ИскомоеМесто!<-4-><<-5->>TEXT-2<:-6-:>Ёмаё<'-7-'>
RegExMatch(Str, ">\K[^<>]+", match)
MsgBox, % match
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

126 (изменено: kamelotto, 2019-12-14 12:04:30)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:

Зачем писать = %, если есть := ?

Дело в том, что я и подцепил этот кусок кода где-то тут, на форуме. Я его запустил и он заработал. Я обратил внимание на необычность синтаксиса, но подумал, что я, как новичок, просто не знаком с такой формой написания. И раз уж Вы сами затронули эту тему, спасибо! Не знал, что это не документированное поведение. Однако разобрать и задокументировать, было бы куда лучше, чем отказываться от использования. Вдруг такая запись открывает какие то возможности, отличающиеся от варианта := .
___________________________________________

Теперь по поводу Вашего шаблона: RegExMatch(Str, ">\K[^<>]+", match) :
1. Мне понравилось такое решение. Изящно и лаконично. Но это не то, что мне надо. МсБокс выдаёт:
---------------------------
ИскомоеМесто!
---------------------------
Но я не зря показал, как должно выглядеть в коде:

Substr = <-1-><-2-><-3->ИскомоеМесто!

То есть, мне нужен кусок строки от её начала, до конца "ИскомоеМесто!"
Я уточню. "Искомое место", может выглядеть и другим текстом. Содержимое этого места будет формироваться из переменной.
2. В таблице выражений для шаблонов я нашёл вот это всё "\r,\t, \b, \w, \s, \d".
Но вот этого "\K" нету. Это тоже какая то недокументированная особенность AHK?
Или я невнимательно искал? А может не там?

127

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu
Почитал обновлённую статью по RegExMatch(). Теперь в ней нет описания опций. Всё таки решили не дублировать, а перенести?

128

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

Вдруг такая запись открывает какие то возможности, отличающиеся от варианта := .

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

kamelotto пишет:

Но это не то, что мне надо.

Ну это легко исправить:

Str = <-1-><-2-><-3->ИскомоеМесто!<-4-><<-5->>TEXT-2<:-6-:>Ёмаё<'-7-'>
RegExMatch(Str, ".+?>[^<>]+", match)
MsgBox, % match
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

129

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

OFF:

kamelotto пишет:

ypppu
Почитал обновлённую статью по RegExMatch(). Теперь в ней нет описания опций. Всё таки решили не дублировать, а перенести?

Это я три года назад взял с официального сайта и перевёл. Стало быть, к тому моменту в английской справке опции уже вынесли в отдельную статью.

130 (изменено: kamelotto, 2019-12-14 12:59:01)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu
В Вашем переводе есть Match Object. Если честно, без примеров кода не совсем понятно, как этим пользоваться. В каком месте RegExMatch() надо указывать Match Object?
Или эту функцию надо вызывать отдельно, передавая ей какие то параметры?
Или надо объявить переменную и присвоить ей этот Match Object ?
Или ещё как то...
Как доставать информацию из Match Object ?

131

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Я как-то даже для себя разбирал примеры и сохранил в файл. Сейчас уже самому трудно въехать, но примеры сохранились. Вот.

; РЕЖИМ 3 (объект).
; Позволяет определить позицию, длину, содержимое всей структуры, а также подстрок, отвечающих подшаблонам.
; Кроме того, можно получить дополнительную информацию по подшаблонам.
; В начало шаблона добавляем O)
;----------------------------------------------------------
;
;
; Вот пример без подшаблонов.
; Данные по структуре, отвечающей всему шаблону, будут помещены в объект Match.
;
FoundPos := RegExMatch("xyzAxyzBxyzCxyz", "O)xyz.xyz.xyz.xyz", Match)
MsgBox, %FoundPos% ;Возвращает позицию всей структуры для первого совпадения: поз. 1

MsgBox, % Match.Value    ;Содержит xyzAxyzBxyzCxyz
MsgBox, % Match.Value(0) ;То же самое
MsgBox, % Match[0]       ;То же самое

MsgBox, % Match.Pos      ;Позиция структуры: 1. Фактически дублирует %FoundPos%
MsgBox, % Match.Pos(0)   ;То же самое
MsgBox, % Match["Pos"]   ;То же самое

MsgBox, % Match.Len      ;Длина найденной структуры: 15
MsgBox, % Match.Len(0)   ;То же самое
MsgBox, % Match["Len"]   ;То же самое




; Теперь выделим подшаблоны.
; Позиции, длины, а также содержимое подстрок, отвечающих подшаблонам, будут помещены  в объект Match.
;
FoundPos := RegExMatch("xyzAxyzBxyzCxyz", "O)xyz(.)xyz(.)xyz(.?)xyz", Match)
MsgBox, %FoundPos% ;Возвращает позицию всей структуры для первого совпадения: поз. 1
MsgBox, % Match.Count()  ;Общее число подшаблонов: 3
MsgBox, % Match.Count    ;То же самое

; На первой найденной подстроке продемонстрируем использование
; прямоугольных скобок вместо круглых

MsgBox, % Match.Value(1) ;Содержимое подстроки 1: A
MsgBox, % Match.Value[1] ;То же самое
MsgBox, % Match[1]       ;То же самое
MsgBox, % Match.Pos(1)   ;Позция     подстроки 1: 4
MsgBox, % Match.Pos[1]   ;То же самое
MsgBox, % Match.Len(1)   ;Длина      подстроки 1: 1
MsgBox, % Match.Len[1]   ;То же самое

MsgBox, % Match.Value(2) ;Содержимое подстроки 2: B
MsgBox, % Match.Pos(2)   ;Позция     подстроки 2: 8
MsgBox, % Match.Len(2)   ;Длина      подстроки 2: 1

MsgBox, % Match.Value(3) ;Содержимое подстроки 3: C
MsgBox, % Match.Pos(3)   ;Позция     подстроки 3: 12
MsgBox, % Match.Len(3)   ;Длина      подстроки 3: 1



; Наконец, пример с именованными подшаблонами.
;
FoundPos := RegExMatch("xyzAxyzBxyzCxyzDxyzExyz", "O)xyz(?P<First_Name>.)xyz(?P<Second_Name>.)xyz(?P<Third_Name>.)xyz(.)xyz(.)xyz", Match)
MsgBox, %FoundPos% ;Возвращает позицию всей структуры для первого совпадения: поз. 1
MsgBox, % Match.Count()  ;Общее число подшаблонов: 5

; В отличие от режима 1 и режима 2, где использовались псевдомассивы,
; подстроки сохраняются в объект и по имени, и по номеру.
; Рассмотрим только подстроку, отвечающую первому подшаблону.


MsgBox, % Match.Value("First_Name") ;Содержимое подстроки First_Name: A
MsgBox, % Match.Value["First_Name"] ;То же самое
MsgBox, % Match["First_Name"]       ;То же самое
MsgBox, % Match.Pos("First_Name")   ;Позция     подстроки First_Name: 4
MsgBox, % Match.Pos["First_Name"]   ;То же самое
MsgBox, % Match.Len("First_Name")   ;Длина      подстроки First_Name: 1
MsgBox, % Match.Len["First_Name"]   ;То же самое
;MsgBox, % Match.Mark("First_Name")

MsgBox, % Match.Value(1) ;Содержимое подстроки First_Name: A
MsgBox, % Match.Value[1] ;То же самое
MsgBox, % Match[1]       ;То же самое
MsgBox, % Match.Pos(1)   ;Позция     подстроки First_Name: 4
MsgBox, % Match.Pos[1]   ;То же самое
MsgBox, % Match.Len(1)   ;Длина      подстроки First_Name: 1
MsgBox, % Match.Len[1]   ;То же самое

*/

132 (изменено: kamelotto, 2019-12-15 04:44:43)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu
Классно! Теперь всё понятно. Даже становится ясно, что же такое, этот загадочный "подшаблон", о котором часто упоминается в статьях по RegExp, но нигде толком не объясняется, что подшаблон это часть, заключённая в скобки, внутри регулярного выражения.
А можно этот кусок текста, с примерами, вставить в статью? Например, в качестве расширенного примечания переводчика. Раздел по регуляркам только выиграет от этого.
Вся эта информация необходима для полноценного понимания работы и возможностей RegExMatch.

133

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker
Да. Тоже лаконично и изящно. Но что, всё таки означает "\К", в Вашем варианте кода RegExMatch(Str, ">\K[^<>]+", match) ?

И есть ещё момент, требующий разъяснения: В своём выражении я указал подшаблон ([^<].+?[^>]), понимая, что между открывающей и закрывающей угловой скобкой должны быть символы, неопределённого количества. А у вас указано просто: [^<>].
Вопрос: Почему это находит совпадение, когда в строке нету стоящих рядом <> ? Ведь между скобками должны быть символы, а у Вас нету.

134

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

\K
Sets the given position in the regex as the new "start" of the match. This means that nothing preceding the K will be captured in the overall match.

135 (изменено: teadrinker, 2019-12-15 22:56:49)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Символы, которые стоят перед \K включаются в рассмотрение, но не включаются в исходящую переменную.
Выражение [^<>] означает один символ, не являющийся < и >.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

136

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker А где это в русской документации есть? — Про "\К".

И опять вопрос. Почему это локаничное выражение работает ".+?>[^<>]+" Я так понимаю:
".+?" — ищем наличие любых символов. При этом не жадничаем, а останавливаем поиск на первом совпадении.
">" — Находим в строке символ >. Насколько я понимаю, первый найденный символ нас устраивает. А за ним включается исключающее правило.
"[^<>]" — исключаем из найденного символы < и >.
"+" — Добавляем любые оставшиеся символы, до конца строки.
Но тогда должно получиться вот это: -1->-2--3-ИскомоеМесто!-4--5-TEXT-2:-6-:Ёмаё'-7-'
Я логику не улавливаю.

137

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Про \K в русской нет, в английской есть в конце страницы.

kamelotto пишет:

"+" — Добавляем любые оставшиеся символы, до конца строки.

Нет, плюс относится к символу или выражению, после которого он стоит, то есть в данном случае к не < и >.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

138 (изменено: kamelotto, 2019-12-16 05:30:29)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker
Но в этом случае тоже должно получиться: -1->-2--3-ИскомоеМесто!-4--5-TEXT-2:-6-:Ёмаё'-7-'
Потому что:
".+?>" — Мы находим всё, дойдя до пятой позиции ">", за которой остановился поиск из-за "?". Вот мы нашли "-1->". Остальные подстроки мы этим куском выражения не находим.
"[^<>]+" — эта фраза заставляет продолжить поиск (игнорируем < и > много раз ), и подцепляем все остальные символы между < и >. Потому что остальные символы не являются "<" и ">", а значит должны войти в результат поиска.
Почему получается вот это: <-1-><-2-><-3->ИскомоеМесто! ?
Как работает эта конструкция?
Я хочу понять логику поведения.

139

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

[^<>]+ означает символы не < и > идущие подряд.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

140 (изменено: kamelotto, 2019-12-16 05:45:49)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker Это не объясняет поведения языка, а просто ставит перед фактом. А я просил объяснить логику поведения языка, во время выполнения выражения ".+?>[^<>]+".
Поиск проигнорировал < и >, и должен поместить в результат все остальные символы. Должна получиться та же строка, но без < и >. В чём я не прав? Может язык ведёт себя не так, как описано в справке?

141

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Нет, вы не совсем понимаете выражение идущие подряд. Идущие подряд означает, что если встретился символ < или >, то последовательность прерывается, и новые символы туда уже не входят.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

142 (изменено: kamelotto, 2019-12-16 17:52:28)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker
Если я Вас правильно понял, Вы имеете ввиду "Идущие подряд в шаблоне — [^<>]", прерывают поиск в строке:
Str = <-1-><-2-><-3->ИскомоеМесто!<-4-><<-5->>TEXT-2<:-6-:>Ёмаё<'-7-'>, как только встретится < или >.
И снова где логика? ".+?>[^<>]+"
В этом случае поиск должен остановиться сразу за пятым символом. Потому что до пятого символа отрабатывается ".+?>", а дальше поиск должен просто заглохнуть. Совпасть должна только часть "<-1->".
1.Почему получается это? : <-1-><-2-><-3->ИскомоеМесто!
2.Почему поиск продолжился и захватил теги строки 1, 2 и три?
3.Почему захватил содержимое между тегами 3 и 4?
4.Почему он остановился не после первого найденного < или >, а только после восклицательного знака?
Ваше объяснение только порождает новые вопросы.

143

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto, что-то я не пойму, в чём проблема. Шаблон описывает символы, не являющиеся < и >, которые идут стразу после строки, оканчивающейся на >. Всё логично.  Найденное соответствует этому описанию? Да.

144

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

В этом случае поиск должен остановиться сразу за пятым символом. Потому что до пятого символа отрабатывается ".+?>", а дальше поиск должен просто заглохнуть. Совпасть должна только часть "<-1->".

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

145 (изменено: kamelotto, 2019-12-16 20:27:58)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

YMP пишет:

Шаблон описывает символы, не являющиеся < и >


Тогда почему вывод такой: <-1-><-2-><-3->ИскомоеМесто! ? Почему шаблон нашёл символы, являющиеся < и > ? Ведь они не соответствуют шаблону.

146

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Почему не соответствуют? .+?> значит всё что угодно, оканчивающееся на >. Весь шаблон .+?>[^<>]+ читается так: любая последовательность символов до первого встретившегося символа > за которым идут один или более (с жадностью) символов, не являющимися < или >. RegExMatch ищет шаблон с начала текста и до тех пор, пока шаблон не будет найден. Как только найден — поиск прекращается.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

147 (изменено: kamelotto, 2019-12-16 21:18:53)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:

любая последовательность символов до первого встретившегося символа >

но это условие мы находим уже на пятой позиции.
А дальше

teadrinker пишет:

за которым идут один или более (с жадностью) символов, не являющимися < или >.

Но это не помешало 2 и 3 тегам найтись в результате, вместе с символами < и >.

148 (изменено: teadrinker, 2019-12-16 21:31:43)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Я понимаю, сложность в том, что, рассматривая шаблон, нужно одновременно удерживать в голове все его части одновременно.

kamelotto пишет:

но это условие мы находим уже на пятой позиции.

teadrinker пишет:

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

<-1-><-2-><-3->ИскомоеМесто!<-4-><<-5->>TEXT-2<:-6-:>Ёмаё<'-7-'>
На пятой позиции у нас >, но что следует за ним? За ним идёт <, поэтому эта часть текста пока не соответствует [^<>]+ (до первого встретившегося символа > за которым идут один или более (с жадностью) символов, не являющимися < или >), но всё ещё соответствует первой части .+ (всё, что угодно), поэтому поиск продолжается дальше, пока не будет найден первый же символ >, за которым  идут один или более (с жадностью) символов, не являющимися < или >.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

149

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinkerПрекрасно! Вроде понятно объяснение.
Осталось прояснить, почему совпадением всего шаблона не стала строка, после восклицательного знака? Ведь там, вроде то же самое.

150

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Упустили это:

teadrinker пишет:

RegExMatch ищет шаблон с начала текста и до тех пор, пока шаблон не будет найден. Как только найден — поиск прекращается.

Шаблон завершается последовательностью не < и > символов. После восклицательного знака идёт <, соответственно уже не входит в последнюю часть шаблона [^<>]+, и поиск прекращается.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

151 (изменено: kamelotto, 2019-12-30 03:37:43)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:

Символы, которые стоят перед \K включаются в рассмотрение, но не включаются в исходящую переменную.

А есть ли такое, но что бы включала в рассмотрение символы, стоящие после НЕЁ, но не включала в исходящую переменную?
Я уже решил это запросом вперёд, но может есть такая форма, как "Буква - слеш"? А то, красиво

152

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Не знаю такого, наверно нет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

153 (изменено: kamelotto, 2019-12-30 17:15:05)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker
Над сделать. Эт логично: \К — обрезает строку, до шаблона. И \к — обрезает строку после шаблона.
Использовать регулярные выражения станет значительно эргономичнее.

Ещё вопросик есть. Задаю здесь, что бы не создавать новой темы:
Вот у меня есть такое в коде: RepliG = %RepliG% ←→ %Ss%. На выходе получается: Текст 1. ←→ Текст 2.
А как сделать, что бы после "Текст 2.", был пробел?

154

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

А есть ли такое, но что бы включала в рассмотрение символы, стоящие после НЕЁ, но не включала в исходящую переменную?
Я уже решил это запросом вперёд, но может есть такая форма, как "Буква - слеш"? А то, красиво

Попытался себе это представить, но не понял что имелось в виду. Дайте пример строки с интересующим участком.

155 (изменено: kamelotto, 2019-12-30 17:33:23)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu
Да вот хотя бы эта строка: "[{"detectedLanguage":{"language":"en","score":1.0},"translations":[{"text":"Группа коллизий","to":"ru"}]}]" Интересует содержимое "Группа коллизий". Но содержимое бывает разное и поэтому оно возвращается и в других формах. Их немного, но раздувать тело кода регулярками на каждую форму тоже не охота. Я решил таким образом: RegExMatch(HTTP.ResponseText, "\[\{""text"":""\K.+(?="",""to"":""ru""\}\]\}\])", match)
В переменной match — интересующий результат = Группа коллизий.
Но вот так было бы логичней и понятней: "\[\{""text"":""\K.+\к"",""to"":""ru""\}\]\}\])"
То есть \к использовать вместо (?=...)

kamelotto пишет:

Ещё вопросик есть. Задаю здесь, что бы не создавать новой темы:
Вот у меня есть такое в коде: RepliG = %RepliG% ←→ %Ss%. На выходе получается: Текст 1. ←→ Текст 2.
А как сделать, что бы после "Текст 2.", был пробел?

Что бы строка заканчивалась пробелом.

156

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

На выходе получается:

Я не очень понял, на выходе из чего.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

157

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

MyString = [{"detectedLanguage":{"language":"en","score":1.0},"translations":[{"text":"Группа коллизий","to":"ru"}]}]
RegExMatch(MyString, "(.+)(""text"":"")(.+)(""`,)", match)
MsgBox,%match3%
Return

158

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu
Не совсем правильно. Кавычка и запятая могут встретиться в тексте перевода.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

159

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

А тут регулярка и не нужна - достаточно Substr.

160

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Не представляю.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

161

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

msgbox % SubStr(MyString, 77, -15)

162

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Точно, а я и забыл, что можно от конца расстояние указать. Думаешь, всегда будет одинаково?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

163

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Я особо не тестировал, но вроде да.

164 (изменено: kamelotto, 2019-12-31 00:40:06)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:
kamelotto пишет:

На выходе получается:

Я не очень понял, на выходе из чего.

Так не важно из чего. Я пытаюсь слепить две строки, в одну, через разделитель "←→".
Вот мой код: RepliG = %RepliG% ←→ %Ss% Это всё строки.
Но мне надо, что бы в конце результирующей строки (RepliG =) стоял пробел. Что бы строка заканчивалась пробелом. Как его добавить, что бы он не терялся. А то, я как ни стараюсь, любой знак в конце можно поставить, а пробел, почему то теряется и в результирующую строку не входит.

165 (изменено: kamelotto, 2019-12-31 01:00:47)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Malcev пишет:

Я особо не тестировал, но вроде да.

ypppu
teadrinker
Этот способ интересен: msgbox % SubStr(MyString, 77, -15). Но дело в том, что возвращаются разные варианты по длине. Поэтому я решил задачу так: "\[\{""text"":""\K.+(?="",""to"":""ru""\}\]\}\])". То есть я просто нахожу шаблоном ту часть ответной строки, которая не меняется, при разных вариантах ответа, и обрезал её с двух сторон. Слева применил "/К", а справа "(?=...)".
Видимо я не понятно поставил вопрос. Решение уже было готово. Меня немного смутил сам синтаксис. Мне показалось, было бы логичнее использовать вместо "(?=...)" - "\к", в качестве обрезки справа , если "\К", обрезает всё слева. То есть: "\K.+\k" ? вместо "\K.+(?=...)". Сам синтаксис выглядел бы логичнее.

166

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

Но мне надо, что бы в конце результирующей строки (RepliG =) стоял пробел.

В чём проблема, нужен пробел, так и поставьте пробел:

RepliG = 1
Ss = 2
RepliG := RepliG . " ←→ " . Ss . " "
MsgBox, % "|" RepliG "|"
kamelotto пишет:

возвращаются разные варианты по длине

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

kamelotto пишет:

Сам синтаксис выглядел бы логичнее.

Ну, мы синтаксис RegEx не можем поменять, он даже не зависит от AHK.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

167 (изменено: kamelotto, 2019-12-31 03:42:00)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:

В чём проблема, нужен пробел, так и поставьте пробел:

Спасибо. Я в синтаксисе запутался, как всегда. На всякий случай хочу уточнить, есть ли разница:
RepliG = %RepliG% ←→ %Ss%
RepliG := RepliG . " ←→ " . Ss
А ещё видел так: MsgBox, % Repli . "←→" . Ss
И вот так: MsgBox, Текст .%Ss%. продолжение текста.
В первом и четвёртом случае, пробел почему то не удерживается в конце строки.

168

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:

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

Первая часть бывает короче. И не факт, что это единственный вариант. Может со временем ещё как то изменится. Больше шансов, ориентироваться на часть с содержимым строки. Уж она то не изменится, в этом языке: [{"text":"Содержимое строки","to":"ru"}]

169

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

хочу уточнить, есть ли разница

Вот здесь почитайте.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

170 (изменено: kamelotto, 2020-01-16 17:55:30)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Столкнулся с необходимостью проверки переменной. Равна она любому пробельному символу, или нет. Будет ли работать, если написать так:
Var = \s
? Или это только в RegEx() применимо?

171

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

\s существует только в рамках RegEx.

172 (изменено: kamelotto, 2020-01-16 19:05:11)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu
Упсь!  И как же тогда поступить в этом случае. Например указать, что переменная не должна равняться любому пробельному символу, или их непрерывной последовательности?

173

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Вроде командой Trim можно срезать пробельные символы. А ещё кое-какой командой можно проверять длину строки. Если после команды Trim длина уменьшилась, значит в переменной были пробельные символы.

174

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu
Но это не решает задачу. Потому что в любом тексте могут быть пробелы, TABы, и переносы строк. И тогда любая строка выдаст соответствие проверке. А надо выяснить, не есть ли пробельные символы в строке, а состоит ли переменная ТОЛЬКО из этих символов.

175

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Если не хочется сравнивать через регулярку, то можно через "if var is type".

176

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Malcev
Не понял. Что такое "if var is type"?

177

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

RTFM!

178

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Malcev
Умеете вы послать Не придерёшься.

179

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

Упсь!  И как же тогда поступить в этом случае. Например указать, что переменная не должна равняться любому пробельному символу, или их непрерывной последовательности?

ypppu пишет:

Вроде командой Trim можно срезать пробельные символы. А ещё кое-какой командой можно проверять длину строки. Если после команды Trim длина уменьшилась, значит в переменной были пробельные символы.

kamelotto пишет:

Но это не решает задачу. Потому что в любом тексте могут быть пробелы, TABы, и переносы строк. И тогда любая строка выдаст соответствие проверке. А надо выяснить, не есть ли пробельные символы в строке, а состоит ли переменная ТОЛЬКО из этих символов.

Задачу, которую Вы сначала озвучили, решает.

180

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

var := " 	"
MsgBox % var ~= "^\s+$"
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

181

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Возможно вы не правильно поняли мой вопрос:

kamelotto пишет:

Или это только в RegEx() применимо?

Или я не правильно понял Ваш ответ:

ypppu пишет:

\s существует только в рамках RegEx.

Но вот, почему то работает без всяких RegEx(), RegExMatch() и RegExReplace()

serzh82saratov пишет:
var := " 	"
MsgBox % var ~= "^\s+$"

Стесняюсь спросить, почему?

182 (изменено: ypppu, 2020-01-17 00:58:56)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Во, этого оператора недостаёт в русском переводе Operators in Expressions.

kamelotto, это как раз и есть сокращённый способ использования RegExMatch.

183 (изменено: kamelotto, 2020-01-17 01:09:05)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

serzh82saratov
Вы применили один оператор ~= , или это составной оператор из двух: ~ и = ?
Как != ?

184 (изменено: kamelotto, 2020-01-17 01:21:18)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu
Это очень приятная новость, на самом деле. Это и есть ответ на мой вопрос! Не понимаю, зачем было отправлять меня в булочную на углу дома, через Нью-Кушугум.
Но я видел только примеры с использованием регулярного выражения, в качестве параметров функций RegExMatch() и RegExReplace().
В разделе "(RegEx) - краткий справочник", написано: "шаблоны поддерживаются функциями RegExMatch(), RegExReplace(), и командой SetTitleMatchMode."
Но разве где то есть, в справке, применение регулярного выражения напрямую в переменную, минуя эти функции?

185 (изменено: kamelotto, 2020-01-17 02:40:46)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu пишет:

Во, этого оператора недостаёт в русском переводе Operators in Expressions.

А как работает этот оператор: ~=
?
Правильно ли я перевёл отсюда https://lexikos.github.io/v2/docs/Variables.htm#Operators :
Var ~=  Возвращает позицию первого символа совпавшего шаблона?
Равносильно, что и: Var = %  RegExMatch( параметры,,,) ?

186

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Я думаю, не совсем правильный перевод. У RegExMatch есть разные режимы, и позиция первого совпадения - только один из них.

187

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

RegExMatch как и ~= всегда возвращает позицию первого символа совпавшего шаблона, если только не произошла ошибка.

188 (изменено: kamelotto, 2020-01-17 12:42:16)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu Похоже, у нас с вами какие то взаимные проблемы с допониманием друг друга. Возможно виной всему, недосказанность в вопросах и ответах, вызванная спешкой. Предлагаю, нам обоим стараться писать более исчерпывающие сообщения.
Вот здесь: https://lexikos.github.io/v2/docs/Variables.htm#Operators оператору ~= посвящена только одна строчка.
Я спрашивал о его поведении. И перевёл то, что связано именно с ним. Или вы хотите сказать, что используя оператор ~= можно заставить RegExMatch, работать и в других режимах?

189 (изменено: Malcev, 2020-01-17 12:46:03)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto,

var := " 	"
MsgBox % var ~= "^\s+$"
msgbox % RegExMatch(var, "^\s+$")

Лично мне запись с RegExMatch привычней.

190

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Кажется разобрался. Поскольку нет OutputVar, то другие режимы невозможны.

Из той же документации стало понятно, почему нет русского перевода:

Prior to [v1.1.03], this operator had the same precedence as the equal (=) operator and was not fully documented.

До [v1. 1. 03] этот оператор имел тот же приоритет, что и оператор equal ( = ), и не был полностью документирован.

191

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

А при чем здесь режимы и значение возвращаемое функцией?

192

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Malcev пишет:

А при чем здесь режимы ...

Я предположил, что в начале шаблона можно указать P) или O). Потом понял, что это так не работает.

193

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Так если указать в начале шаблона RegexMatch P) или O), то возвращаемое значение функции не изменится, а изменится переменная для вывода шаблона.

194

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Malcev, я последнее сообщение не понял. 
Оно относится к MsgBox % var ~= "^\s+$" или к msgbox % RegExMatch(var, "^\s+$")?

195 (изменено: kamelotto, 2020-01-18 02:07:34)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu Кажется я понял, что имел ввиду Malcev Шаблон регулярного выражения помещается в переменную. А она одинаково себя ведёт, и в случае MsgBox % var ~= "^\s+$" , и в случае msgbox % RegExMatch(var, "^\s+$"). Разница только в форме вызова функции. Внутри она осталась, какая и была. Отсюда вытекает, что теоретически, опции должны работать, одинаково, в обоих случаях. Ведь они указываются внутри шаблона, помещаемого в эту (внутреннюю) переменную. То есть изменения делаются не после применения шаблона к строке, а до (изменяется само условие поиска).
Я правильно понял?

196 (изменено: kamelotto, 2020-01-18 02:10:58)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

ypppu пишет:

До [v1. 1. 03] этот оператор имел тот же приоритет, что и оператор equal ( = ), и не был полностью документирован.

А какой теперь приоритет?

197

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Я имел в виду, что это всё равносильно:

var := "abc"
Pos1 := RegExMatch(var, "b")
Pos2 := RegExMatch(var, "O)b")
Pos3 := var ~= "b"
msgbox % Pos1 "`n" Pos2 "`n" Pos3

198 (изменено: kamelotto, 2020-01-18 13:00:28)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Malcev пишет:

Я имел в виду, что это всё равносильно:

А такую сложность можно обеспечить подобным коротким оператором?

FoundPos := RegExMatch("xyzAxyzBxyzCxyzDxyzExyz", "O)xyz(?P<First_Name>.)xyz(?P<Second_Name>.)xyz(?P<Third_Name>.)xyz(.)xyz(.)xyz", Match)
MsgBox, %FoundPos% ;Возвращает позицию всей структуры для первого совпадения: поз. 1
MsgBox, % Match.Count()  ;Общее число подшаблонов: 5
MsgBox, % Match.Value("First_Name") ;Содержимое подстроки First_Name: A

Я имею ввиду, сделать то же самое, но с помощью ~= , или чего то похожего.

199

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Нет. Так-как:

[v1.0.90+]: Within an expression, the a ~= b can be used as shorthand for RegExMatch(a, b).

https://www.autohotkey.com/docs/commands/RegExMatch.htm

200

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

kamelotto пишет:

А какой теперь приоритет?

В статье Variables and Expressions  есть подраздел Operators in Expressions. В котором идёт таблица Expression Operators (in descending precedence order), что дословно означает "Операторы выражений (в порядке убывания приоритета)". Можете потренироваться - операторы в верхней части таблицы должны обрабатываться раньше, чем операторы в нижней её части.