201

Re: AHK: Регулярные выражения

Ага, точно.

msgbox % RegexReplace(msg, "^(.*?\R){3}[^\r\n]{0,3}\R?")

202

Re: AHK: Регулярные выражения

stealzy пишет:

Напишите в тему TF, или заведите новую.

Дайте ссылку на тему, пожалуйста.

stealzy, Тема смежная, и так или иначе, как мне кажется, имеет отношение к регулярным выражениям, пусть и заключенных в функции, поэтому, написал здесь.

Malcev, спасибо! Работает.

И все таки, чтобы понять, как правильно пользоваться функцией TF_RemoveLines, стоит создать отдельную тему или все-таки она уже существует в комьюнити?

Win10x64, AHK v1.1.25

203

Re: AHK: Регулярные выражения

becauseim, а почему вы выводите переменную msg?
Она же в результате данной функции не меняется.

#include tf.ahk
msg =
(
123
456
789
000000
)
msgbox % TF_RemoveLines(msg, 1,3)
MsgBox % msg

204

Re: AHK: Регулярные выражения

becauseim
Создайте. Я нашёл её упоминание только в этом топике. Здесь оффтоп.

205

Re: AHK: Регулярные выражения

Malcev, понял, спасибо!

Win10x64, AHK v1.1.25

206 (изменено: mozers, 2017-04-08 13:30:47)

Re: AHK: Регулярные выражения

becauseim пишет:

я не понимаю, как отредактировать предложенное таким образом, чтобы удалялись не три, а четыре строки с начала текста, а также, например, пять, а не три символов
И предложеный вариант пользователем Malcev не был забракован

Ну если так, то, извините. Тогда все просто:

msg =
(
123
456
789
999999
000000
)
ls := 4 ; кол-во удаляемых строк
cs := 5 ; кол-во удаляемых символов
msgbox % RegexReplace(msg, "^(.*?\R){" ls "}[^\r\n]{0," cs "}\R?")

Модератор: Перенесено из альтернативной темы.

207

Re: AHK: Регулярные выражения

mozers, спасибо! Видимо, я не до конца протестировал и этот вариант, но кажется, выражение удаляет заданное количество символов с первой оставшейся строки после удаленных строк. Т.е. возможности выбрать конкретную строку, в начале которой необходимо удалить символы, не предусмотрено. Иными словами, все желания удовлетворены, кроме одного:

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

Win10x64, AHK v1.1.25

208

Re: AHK: Регулярные выражения

becauseim
А теперь тоже самое, но по русски:
Удалить A строк c начала текста. Затем удалить со строки, которая до удаления начальных строк имела номер B, C символов с начала.

msg =
(
1_aaaaaaa
2_bbbbbbbbb
3_ccccc

5_eeee
6_fffffff
7_ggggG
8_hhhhhh
9_iiiiiii
)
a := 5 ; кол-во удаляемых строк в начале
b := 7 ; номер строки в которой будут удалятся символы
c := 6 ; кол-во удаляемых символов в этой строке
msg := RegexReplace(msg, "^(.*?\R){" a "}") ; удаляем начальные строки
b := b - a - 1 ; номер строки в которой будут удалятся символы изменился
msg := RegexReplace(msg, "^((?:.*?\R){" b "})[^\r\n]{0," c "}(\R?)", "$1$2") ; удаляем символы с заданной строки
msgbox % msg

Если я опять тебя не понял - учи русский язык, если понял правильно - учи регулярные выражения - они - сила великая!

209

Re: AHK: Регулярные выражения

mozers, Спасибо! То, что Вы не поняли моей формы изложения, вовсе не указывает на мой уровень знания языка. Что я сделал неправильно - изначально не привлек внимания к тому, что привел в вопросе случайные числа для практического примера, полагая, что это разумеющееся обстоятельство. Ведь сегодня мне может понадобиться удаление трех символов, а завтра уже четырех, например. А то, что для кого-то я остался непонятым даже после соответсвующих уточнений, наводит на другие проблемы, и не мои. Ну, а абсолютное незнание регулярных выражений - безусловно, моя проблема. Буду искать уроков с объяснением на пальцах, чтобы было понятно даже мне. А приводить предмет вопроса впредь постараюсь в форме, приближенной к Вашей.

Win10x64, AHK v1.1.25

210

Re: AHK: Регулярные выражения

becauseim, извини если был груб. Просто я сам обычно долго думаю над формулировкой вопроса (отвечаю гораздо быстрее). И, зачастую, пока думаешь и несколько раз переписываешь вопрос чтобы он звучал понятно для всех, решение само приходит в голову.
По поводу регулярных выражений: На этой страничке весьма скромная информация. В инете много более подробной и более легкой для понимания инфы.

211

Re: AHK: Регулярные выражения

becauseim, в русской справке расписаны только шаблоны по RegEx. Примеры с объяснением на пальцах смотрите в английском варианте: RegExMatch() и RegExReplace().

212 (изменено: svoboden, 2017-05-18 07:18:47)

Re: AHK: Регулярные выражения

Вот книгу нашел по регулярным выражениям для AutoHotkey (на английском). Может, для начинающих будет полезной.

213

Re: AHK: Регулярные выражения

Там много (200 тыс.) букв, и все английские. Начинающим придётся попотеть с переводом.

214

Re: AHK: Регулярные выражения

а подскажите в AHK нормально работает жадность ?  когда при "s" опции используешь .*?
у меня что-то с ними проблема. захватывает больше чем надо хотя должен остановится ? жадность то убрана.
на форуме это обсуждалось? или есть где статься об этом? в мануале все скудно об этом говорится. спасибо.

215

Re: AHK: Регулярные выражения

Если вы считаете, что реализация PCRE в AHK неправильная, где ваш, мать его, код?
Что я могу ответить на беспредметное нытье типа "у меня не работает"?
У меня все работает, если вам интересно. Помог надеюсь.

216 (изменено: mustang, 2017-05-19 18:14:12)

Re: AHK: Регулярные выражения

Возможно дело и не в жадности, может регулярка у меня не правильная.
Мой код парсит html. Не буду его большой тут постить. Приведу пример попроще.
В примере по первому regex находит правильно, 2 варианта.
По второму - я жду от него тоже 2 варианта.
- 1.) "ok this is text 1" и пустое param
- 2.) "ok this is text 2" + "param 2"
... но тут он один раз находит "ok this is text 1" + "param 2"
и на этом закончил. Вот и не пойму куда копать.

В общем может быть много ok this is text 1  ok this is text 2 ok this is text 3  NNNN.... но param может быть, а может и не быть ... а все их надо по порядку перебрать и все сохранить.


string = 
(
ok this is text 1 -----------
lost
lost
ok this is text 2 -----------
param 2
param 3
)

regex := "Ois)(?P<var_text>ok this is text \d+)"

for i,result in RxMatches(string, regex) { 
    MsgBox % "ver.1 = " . result.var_text
}

regex := "Ois)(?P<var_text>ok this is text \d+)(.+?param (?P<var_num>\d+))?"

for i,result in RxMatches(string, regex) { 
    MsgBox %  "ver.2 = " . result.var_text . " ---- " . result.var_num
}


; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FUNC - INIT

RxMatches(Haystack, Needle) {
    Result := [] ;new MatchCollection()
    start = 1
    loop
    {
        if(!RegexMatch(haystack, needle, M, start)) 
            break

        Result.Insert(M)
        start := M.Pos + M.Len
    }

    return Result
}
ExitApp

217

Re: AHK: Регулярные выражения

mustang, расставьте заглавные буквы и знаки препинания в своих сообщениях.
http://forum.script-coding.com/viewtopi … 55#p115655
http://forum.script-coding.com/viewtopi … 64#p115664
http://forum.script-coding.com/viewtopi … 37#p115937
http://forum.script-coding.com/viewtopi … 40#p115940

218 (изменено: Malcev, 2017-05-19 19:17:45)

Re: AHK: Регулярные выражения

mustang, если в чем-то сомневаетесь, то проверяйте на простейшем примере:

var := "abcXYZ123123"
RegExMatch(var, "s)abc.*123", SubPat)
msgbox % SubPat
RegExMatch(var, "s)abc.*?123", SubPat)
msgbox % SubPat

219

Re: AHK: Регулярные выражения

ypppu, это да, если бы не было кнопки перевести эту страницу.

220

Re: AHK: Регулярные выражения

Если новичок поймёт машинный перевод, значит он не такой уж новичок.