301

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

Вся информация о варианте RegEx, который используется в AHK, здесь.
\v — любой символ из вертикальных пробелов, то-есть `n или `r.
\V — любой символ, не являющийся вертикальным пробелом.
\h и \H — то же самое с горизонтальными пробелами.

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

302

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

teadrinker Спасибо за ценную инфу!
Буду изучать ...

303 (изменено: BlackCat, 2021-10-14 18:57:14)

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

teadrinker у меня очередной вопрос для понимания RegEx, если еще не надоел
Допустим, теперь необходимо удалить из текста " " ... лучше на примере кода, чтобы было понятно.

Этот код:


text =
( %
C:\Program Files\xxxx
"C:\Program Files\xxxx"
%ProgramFiles%\xxxx
"%ProgramFiles%\xxxx"
)

MsgBox % RegExReplace(text, "`ami)^.*%?Program\s?Files%?(\V*)\x22", A_ProgramFiles "$1")

выдает такой выхлоп на MsgBox:


C:\Program Files\xxxx
C:\Program Files\xxxx
%ProgramFiles%\xxxx
C:\Program Files\xxxx

Нужно во всех случах, не изменяя path, избавиться от " " и трансформировать переменную винды %ProgramFiles% в вид C:\Program Files
Что делаю не так???

Пробовал варианты с \x22? и прочие другие - ничего не получается.
Короче SOS - хочу понять!

304

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

text =
( %
C:\Program Files\xxxx
"C:\Program Files\xxxx"
%ProgramFiles%\xxxx
"%ProgramFiles%\xxxx"
)
MsgBox, % RegExReplace(text, "`am)^.+?Program ?Files%?([^""]*)""?$", A_ProgramFiles . "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

305

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

teadrinker как всегда все работает!
Спасибо огромное!

306

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

Всем желаю доброго времени суток!
Подскажите пожалуйста, можно ли ниже приведенный код, упростить | сократить | оптимизировать| усовершенствовать ?


NewStr = 
(
1.?<h>https://www.google.com
2.??https://www.autohotkey.com

;l<Олень><wekrhttps://learn.javascript.ru/regexp-multiline-mode

)

value := deleteDebris(NewStr)

MsgBox, % value

ExitApp

deleteDebris(strigInput)
{
    Loop, parse, strigInput, `n, `r
    {
        if (A_LoopField = null)
            continue
        newString .= "http" RegExReplace(A_LoopField, "(.*)(http)") "`n"
    }
    return newString
}

Задача кода:
1) Удалять всё, кроме ссылок на интернет страницы.
2) Оставить только чистую ссылку.

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

307

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

Решение зависит от того, что считать окончанием ссылки — конец строки, или что-то ещё?

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

308

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

teadrinker Рад приветствовать! Ваш вклад в развитие форума, трудно переоценить.


teadrinker пишет:

Решение зависит от того, что считать окончанием ссылки — конец строки, или что-то ещё?

Хм. Я боялся этого вопроса.

Исходя из моего весьма скромного уровня осознанности, я думаю что простейшим вариантом есть следующее.
Окончанием URL можно считать:
первый пробел || окончание строки

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

309

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

Попробуйте так:

NewStr = 
(
1.?<h>https://www.google.com
2.??https://www.autohotkey.com

;l<Олень><wekrhttps://learn.javascript.ru/regexp-multiline-mode

)

MsgBox, % RegExReplace(NewStr, "s).*?(https?://.*?(?=\s|$)).*?(?=(?1)|$)", "$1`r`n")
; или
MsgBox, % RegExReplace(NewStr, "s).*?(https?://[^\s""<>]+).*?(?=(?1)|$)", "$1`r`n")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

310

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

teadrinker

Они оба работают. Это шикарные шаблоны! Браво!
спустя какое-то время, дам ответ какой оказался более подходящим. Надо протестировать...

Большое человеческое спасибо! 

Можно попросить поверхностную расшифровку?

"s).*?(https?://.*?(?=\s|$)).*?(?=(?1)|$)"

s).*?( - это что угодно перед "https"  ??

Что обозначает этот блок?

"$1`r`n"
AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

311

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

migomigo пишет:

Что обозначает этот блок?

Загляните в справку, что означает третий параметр в RegExReplace, там всё чётко объясняется. Или я не совсем понял, в чём именно вопрос, поясните.

migomigo пишет:

s).*?( - это что угодно перед "https"  ??

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

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