1 (изменено: vladmany, 2018-11-25 23:50:02)

Тема: AHK: Регулярные выражения и особенности RegExMatch

Есть текст:
score_Something_min=10
На месте слова Something может быть любое другое слово. И вот мне нужно используя RegExMatch взять из этого текста только score_слово
а чтобы всё остальное проигнорировалось. Я почти смог этого добиться но остается нижнее подчеркивание после слова.

Test := RegExMatch(Test, "score_.*_")

2

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany, у нас не приветствуется использование в заголовках тем слов типа «помогите», «спасите», «хулиганы зрения лишают», и т. п. Заголовок должен чётко описывать суть вопроса.

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

3

Re: AHK: Регулярные выражения и особенности RegExMatch

teadrinker
Извиняюсь, я только недавно здесь зарегистрировался. Так нормально?

4

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany пишет:

AHK: Регулярные выражения и особенности RegExMatch

Ну это примерно как «Программирование и его особенности в AHK». Можно «Получить слово через RegexMatch», если вы уверены что RegexReplace() совершенно точно не годится. А вообще на будущее по регулярным выражениям уже много существующих тем, и нет особого смысла плодить новые, можно просто задать вопрос в такой теме.

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

5

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany, RTFM!
В примерах по регулярным выражениям показано, как использовать позитивные запросы вперед или как сохранять подшаблоны.

6 (изменено: vladmany, 2018-11-26 02:42:41)

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev
Я конечно извиняюсь, но вы слишком часто ссылаетесь на справки. Я прошу просто помочь с конкретной задачей, а не сказать мне в 100-тый раз что этому можно научиться читая справку. Не всегда информация из справки понимается легко.

7

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany пишет:

прошу просто помочь с конкретной задачей

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

8

Re: AHK: Регулярные выражения и особенности RegExMatch

Перевод RegExMatch

9 (изменено: vladmany, 2018-11-26 22:14:22)

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev
В данном случае я как раз и сказал вам что мне не понятно. Я даже вам мою попытку приложил, чтобы вы ну думали что я тупо ничего не делаю, а только прошу бесплатной помощи. Я уже во многом разобрался в авто хот ки, много эксперементировал с шаблонами, но именно как решить мою задачу я не совсем понимаю, вот и обратился к вам за помощью. Хотябы банальную подсказку бы дали, типо нужно подключить там такой-то шаблон, или что-то вроде этого, а вы сразу:
Находи решение сам либо плати!

10 (изменено: vladmany, 2018-11-26 22:36:19)

Re: AHK: Регулярные выражения и особенности RegExMatch

Объясню ещё подробнее чего мне нужно добиться. Есть текст score_something_min=1
Где something это произвольное слово. Мне нужно чтобы RegExMatch дал на выходе score_something а все, что идет после этого игнорировал. На словах ничего сложного, но на практике я применял много разных функций RegExMatch и у меня не выходит добиться нужного результата. Вся сложность в том, что последнее произвольное слово заканчивается перед нижним подчеркиванием, которое мне на выходе не нужно. Есть конечно вариант после RegExMatch применить RegExReplace, и убрать им то лишнее подчеркивание, но я думаю есть решение попроще. Нужно как бы дать программе знать что произвольное слово заканчивается перед нижним подчеркиванием, но само это подчеркивание не вносить в результат поиска. Прошу, помогите мне.

11

Re: AHK: Регулярные выражения и особенности RegExMatch

Заходите:
http://www.script-coding.com/AutoHotkey/RegExMatch.html
Смотрите 3-ий пример.

12

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev
Не понимаю как нечувствительность к регистру сможет мне помочь?

13

Re: AHK: Регулярные выражения и особенности RegExMatch

Не правильно посчитал - 4-ый.

14

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev
Ну да, мне пока пальцем не ткнешь я не замечу.. Типичный я..

15

Re: AHK: Регулярные выражения и особенности RegExMatch

Допустим у меня есть шаблон:

"[^min]*"

Он запрещает чтобы в Heystack были символы m,i,n. Как сделать чтоб этот запрет действовал не на отдельные буквы, а на всё слово min?
Тоесть, чтобы буквы m,i,n по отдельности он пропускал, а слитно нет.

16

Re: AHK: Регулярные выражения и особенности RegExMatch

Запросы вперед и назад:
http://www.script-coding.com/AutoHotkey/RegEx.html

RegexMatch("maxmin","((?!min).)*", match)
msgbox % match

17

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev
В вашем примере RegExMatch просто игнорирует слово min и делает его необязательным, а мне нужно чтобы при обнаружении этого слова RegExMatch вообще не срабатывал и ничего не выдавал.

18

Re: AHK: Регулярные выражения и особенности RegExMatch

Моего примера и внимательного прочтения документации ИМХО достаточно для того, чтобы воплотить, задуманное.
Если же нет, то может кто-нибудь другой вам разжуёт.

19 (изменено: teadrinker, 2018-12-01 19:32:12)

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany пишет:

нужно чтобы при обнаружении этого слова RegExMatch вообще не срабатывал и ничего не выдавал

vladmany, вы не совсем правильно понимаете принцип работы RegEx. Он нужен не для того, чтобы определить, чего не должно быть в исходном тексте, а чтобы определить, какая часть исходного текста нам нужна. А для вашей задачи лучше использовать InStr().

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

20

Re: AHK: Регулярные выражения и особенности RegExMatch

Разжевывать не обязательно, хватило бы просто примера. Ладно, может кто другой знает как это сделать, и сможет показать это на практике(в коде). Был бы благодарен такому человеку..

21

Re: AHK: Регулярные выражения и особенности RegExMatch

RegexMatch("maxmin","^((?!min).)*$", match)
msgbox % match

Но InStr() в этом случае проще.

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

22 (изменено: vladmany, 2018-12-01 21:50:26)

Re: AHK: Регулярные выражения и особенности RegExMatch

teadrinker пишет:

vladmany, вы не совсем правильно понимаете принцип работы RegEx. Он нужен не для того, чтобы определить, чего не должно быть в исходном тексте, а чтобы определить, какая часть исходного текста нам нужна. А для вашей задачи лучше использовать InStr().

Мне нужно и то и другое, то-есть проверить исходный текст, подходит ли он по шаблону, нет ли в нем того чего не нужно, и нужные части текста отправить в переменные Subpattern, если RegExMatch всё это умеет, зачем использовать ещё и InStr()?

teadrinker пишет:
RegexMatch("maxmin","^((?!min).)*$", match)
msgbox % match

Но InStr() в этом случае проще.

Что-то я не могу перед вашим шаблоном другие шаблоны написать. Вот переделайте свой пример так, чтобы по шаблону перед этим запрещением слова min обязательно было слово max. Иными словами программе нужно указать что после слова max не должно быть слова min. А в данном случае если во всем Haystack нету min то всё нормально.

23

Re: AHK: Регулярные выражения и особенности RegExMatch

А теперь построй-ка мне избу!
https://i.ytimg.com/vi/RmoVYbvA8ZM/mqdefault.jpg

24 (изменено: vladmany, 2018-12-01 21:53:58)

Re: AHK: Регулярные выражения и особенности RegExMatch

ypppu
Если бы другие шаблоны нормально писались перед и после шаблона, который запрещает min, я бы этого не просил сделать.

25

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany пишет:

Вот переделайте свой пример так, чтобы по шаблону перед этим запрещением слова min обязательно было слово max.

Легко:

RegexMatch("testmaxmin","^((?!maxmin).)*$", match)
msgbox % match
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

26

Re: AHK: Регулярные выражения и особенности RegExMatch

teadrinker
Немного не так. Нужно чтобы перед запрещенным словом шло не запрещенное, или что угодно(.*)
Короче, покажу на примере моей задачи:
Допустим есть текст:
score_something_min=54
где вместо something может быть любое слово, а на месте цифр могут быть любые цифры. И сейчас RegExMatch даст сбой, так как перед знаком равно есть слово _min. Но если исходный текст будет таким:
score_something=54
то RegExMatch выполнится. Такой шаблон мне нужен.

27

Re: AHK: Регулярные выражения и особенности RegExMatch

Так он и "выполнится", что бы вы под этим не понимали:

RegexMatch("score_something=54","^((?!min).)*$", match)
msgbox % match
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

28

Re: AHK: Регулярные выражения и особенности RegExMatch

teadrinker
Просто мне нужно то что будет под любым словом и любой цифрой занести в Subpattern и в дальнейшем использовать..

29

Re: AHK: Регулярные выражения и особенности RegExMatch

input := "score_Something_min=10"

;На месте слова Something может быть любое другое слово.
;И вот мне нужно используя RegExMatch взять из этого текста только score_слово
;а чтобы всё остальное проигнорировалось.



RegExMatch(input, "score_([^_]*)", SubPat)
MsgBox, %SubPat1%
MsgBox,  score_%SubPat1%

30

Re: AHK: Регулярные выражения и особенности RegExMatch

ypppu
Это был ответ teadrinker а не просьба показать как это делается.

31 (изменено: vladmany, 2018-12-01 22:36:42)

Re: AHK: Регулярные выражения и особенности RegExMatch

Вообщем, моя задача такая:
Нужно в этот шаблон

RegExMatch("score_something_min=54", "score_(.*)=(.*)", MaxSc)

добавить правило, что после score_(.*) не должно быть слова _min.

32

Re: AHK: Регулярные выражения и особенности RegExMatch

Я отвечал на первое сообщение в теме. Задача изменилась? А точно известно, что в самом Something не может быть "_min"?

33

Re: AHK: Регулярные выражения и особенности RegExMatch

Так?

RegexMatch("score_something_min=54","score_((?:(?!min).)*?)=(.*)", match)
MsgBox, % match  . "`n"
        . match1 . "`n"
        . match2
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

34

Re: AHK: Регулярные выражения и особенности RegExMatch

teadrinker
Да, то что нужно. Благодарю за помощь!

35

Re: AHK: Регулярные выражения и особенности RegExMatch

Главное, чтобы вы разобрались, как это работает.

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

36

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany пишет:

если RegExMatch всё это умеет, зачем использовать ещё и InStr()?

Чтобы потом было проще при необходимости вносить коррективы в код.
Из своего опыта - без постоянной практики спустя время разобрать мудрёную регулярку будет тяжело.

37

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev, учту.

38

Re: AHK: Регулярные выражения и особенности RegExMatch

Как сделать шаблон не обязательным? К примеру у меня есть текст:
clear @p[score_Clear=1] minecraft:redstone_block 2 4 {Test:131}
При этом, этого - {Test:131} в нём может и не быть.
Его находит шаблон
clear (.*) (.*) (.*) (.*) (.*)
Но нужно сделать так, чтобы последний (.*) был необязателен, то-есть при тексте
clear @p[score_Clear=1] minecraft:redstone_block 2 4
Этот шаблон его находил.
Пытался делать вот так
clear (.*) (.*) (.*) (.*) (.*)?
Но это не работает.
Как всегда, буду благодарен за помощь..

39

Re: AHK: Регулярные выражения и особенности RegExMatch

Мало что понятно. Зачем текст нужно "находить", если он уже "есть".

vladmany пишет:

К примеру у меня есть текст:

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

40

Re: AHK: Регулярные выражения и особенности RegExMatch

teadrinker, ну всмысле RegExMatch его находит при таком шаблоне.

41

Re: AHK: Регулярные выражения и особенности RegExMatch

Иными словами, нужен шаблон, чтобы было либо что-то, либо вообще ничего. И это взять в скобки, чтобы оно отправилось в переменную.

42

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany пишет:

всмысле RegExMatch его находит при таком шаблоне.

Находит где, в самом себе?

vladmany пишет:

это взять в скобки

Это???

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

43 (изменено: vladmany, 2018-12-07 22:25:02)

Re: AHK: Регулярные выражения и особенности RegExMatch

Ну я имел в виду, если прописать
If RegExMatch("clear @p[score_Clear=1] minecraft:redstone_block 2 4 {Test:131}", "clear (.*) (.*) (.*) (.*) (.*)")
И этот if выполнится.
А мне нужен шаблон, который выполниться даже если на месте " {Test:131}" (без кавычек) будет ничего.

44

Re: AHK: Регулярные выражения и особенности RegExMatch

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

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

45

Re: AHK: Регулярные выражения и особенности RegExMatch

teadrinker, этот текст в виде примера, на его месте может быть другой.

46

Re: AHK: Регулярные выражения и особенности RegExMatch

Тогда как можно понять, какой шаблон должен быть, если текст может быть любым? И откуда он возьмётся в коде?

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

47

Re: AHK: Регулярные выражения и особенности RegExMatch

teadrinker, просто нужно сделать чтобы было либо что угодно с пробелом перед этим что угодно, либо нечего без пробела.

48

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany пишет:

Пытался делать вот так
clear (.*) (.*) (.*) (.*) (.*)?
Но это не работает.

Конечно не сработает, так как у вас в шаблоне 4 пробела, а в исходном тексте 3.

49 (изменено: vladmany, 2018-12-07 23:09:50)

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev, да я уже понял. Сделал два последних шаблона слитно, но из-за этого в один Subpatern сразу два шаблона уходит. На пиложенных скринах видно что без пробела после "clear @p[score_Clear=1] minecraft:redstone_block 2 4" все нормально, а когда он добавляется, начинается то, что мне не нужно, эти два последних шаблона должны в разные сабпатерны уходить.

Post's attachments

Screenshot_4.png
Screenshot_4.png 50.68 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

50 (изменено: vladmany, 2018-12-07 23:11:21)

Re: AHK: Регулярные выражения и особенности RegExMatch

.

Post's attachments

Screenshot_5.png
Screenshot_5.png 50.66 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

51 (изменено: Malcev, 2018-12-07 23:18:50)

Re: AHK: Регулярные выражения и особенности RegExMatch

Лично мне непонятно, чего вы добиваетесь.
Советую в тестировании использовать простой текст, типа "one two three four" - возможно вам тогда станет понятнее почему у вас не получается задуманное.

52 (изменено: vladmany, 2018-12-07 23:31:54)

Re: AHK: Регулярные выражения и особенности RegExMatch

Задача состоит в том, что мне нужно из исходного текста взять нужную информацию, отправить её по разным переменным и уже с ними работать. Структура исходного текста будет постоянно такой, только последний параметр может быть, а может и не быть. Нужен шаблон, который при наличии последнего параметра будет отправлять его в Subpatern, а если его не будет, то то шаблон так же будет работать, только уже без него. Между аргументами стоит пробел, так что нужно сделать, чтобы было два варианта, либо был просто текст типа "clear @p[score_Clear=1] minecraft:redstone_block 2 4" либо пробел и тот необязательный аргумент допустим. Надеюсь в этот раз понятно объяснил.

53

Re: AHK: Регулярные выражения и особенности RegExMatch

Непонятно.
Приведите 2 варианта в кавычках и с упрощенными словами.

54 (изменено: vladmany, 2018-12-07 23:51:18)

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev пишет:

Советую в тестировании использовать простой текст, типа "one two three four" - возможно вам тогда станет понятнее почему у вас не получается задуманное.

Ну если так вам станет понятно чего мне нужно добиться то пожалуйста.
Есть текст "one two three four" при этом слова four может и не быть, а шаблон всё равно сработает(выдаст правду при if). Говоря нету слова four я подразумеваю что пробела перед ним тоже нет. Кроме того, каждое найденное из слов должно уходить в отдельную переменную, в том числе и необязательное слово four если оно конечно присутствует. Ну и как вы уже поняли из моих примеров, шаблоны для каждого слова состоят из (.*). Иными словами, RegExMatch проверяет, есть ли в исходном тексте 4 любых слова разделённых пробелами, и присутствие последнего слова(включая пробел перед ним) необязательное.

55

Re: AHK: Регулярные выражения и особенности RegExMatch

vladmany пишет:

Говоря нету слова four я подразумеваю что пробела перед ним тоже нет.

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

56

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev Пытался, но всё равно два слова уходят в один Subpatern

57

Re: AHK: Регулярные выражения и особенности RegExMatch

Как пытались?

58

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev Ну допустим вот так. Просто поставить пробел перед .* в скобках. Но блин, это и так было понятно что неправильно. Покажите мне, как сделать и пробел не обязательным, но чтобы Subpatern'ы не сливались с предыдущим словом.

Post's attachments

Screenshot_8.png
Screenshot_8.png 43.46 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

59 (изменено: vladmany, 2018-12-08 00:09:23)

Re: AHK: Регулярные выражения и особенности RegExMatch

Кстати, сливаются они после того как я ставлю тот необязательный пробел. Когда необязательного текста нет, сабпатерны не сливаются.

60

Re: AHK: Регулярные выражения и особенности RegExMatch

Это происходит потому, что ".*" - может быть всем, чем угодно.

61 (изменено: vladmany, 2018-12-08 00:11:18)

Re: AHK: Регулярные выражения и особенности RegExMatch

MalcevТоесть по любому нужно намекнуть что именно будет в этом что угодно, чтобы сузить круг поиска так сказать?

62

Re: AHK: Регулярные выражения и особенности RegExMatch

Нельзя просто задать шаблон три любых слова, и четвертое не обязательное включая пробел перед ним?

63 (изменено: vladmany, 2018-12-08 00:17:20)

Re: AHK: Регулярные выражения и особенности RegExMatch

Я уже давно бы мог решить эту задачу добавив ещё один if, но думал регулярками это все же можно сделать, и в плане оптимизации будет лучше.

64

Re: AHK: Регулярные выражения и особенности RegExMatch

Судя по всему вместо ".*" вам надо указать, что в подшаблоне не должно быть пробела.

65

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev, будьте добры, укажите, я в подшаблонах так и не разобрался. Думаю после этого примера что-то в голове отложится..

66

Re: AHK: Регулярные выражения и особенности RegExMatch

[^...]
Означает один любой символ из тех, которых нет в перечне. Например, [^/]* есть пустая или любой длины последовательность любых символов, среди которых нет символа "/", например: http://. Сходным образом, [^0-9xyz] есть любой символ, не являющийся цифрой или буквой x, y, или z.

http://www.script-coding.com/AutoHotkey/RegEx.html

67 (изменено: vladmany, 2018-12-08 00:24:45)

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev, та же история.. Слова one и two сливаются и идут в один сабпатерн

Post's attachments

Screenshot_9.png
Screenshot_9.png 48.6 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

68

Re: AHK: Регулярные выражения и особенности RegExMatch

Ну тогда на данном этапе используйте if.
Может потом додумаете.

69

Re: AHK: Регулярные выражения и особенности RegExMatch

Malcev, похоже выхода нет. Ладно, спасибо за уделенное мне время.

70

Re: AHK: Регулярные выражения и особенности RegExMatch

Как удалить пробел в конце любого текста если он там присутствует?

71

Re: AHK: Регулярные выражения и особенности RegExMatch

https://autohotkey.com/docs/commands/Trim.htm

72 (изменено: vladmany, 2019-01-04 15:57:50)

Re: AHK: Регулярные выражения и особенности RegExMatch

А как можно RegExReplace'ом заменить все заглавные буквы на строчные?

73

Re: AHK: Регулярные выражения и особенности RegExMatch

Format() = ?


str := "ВсЕ зАгЛаВнЫе На СтРоЧнЫе"
MsgBox % Format("{:l}",str)

74 (изменено: vladmany, 2019-01-04 17:41:15)

Re: AHK: Регулярные выражения и особенности RegExMatch

KusochekDobra, хотя это тоже подойдет. Спасибо.

75

Re: AHK: Регулярные выражения и особенности RegExMatch

Тоже самое есть и в RegExReplace, но в нём можно что то сразу выделить.


str := "тУТ зАгЛаВнЫе, тУТ СтРоЧнЫе, тУТ титуЛЬНЫЕ"
MsgBox % RegExReplace(str, "(.*?),(.*?),(.*)", "$U1,$L2,$T3") 

str := "ВсЕ зАгЛаВнЫе На СтРоЧнЫе"
MsgBox % RegExReplace(str, "(.*)", "$L1")  

str := "ВсЕ СтРоЧнЫе На зАгЛаВнЫе"
MsgBox % RegExReplace(str, "(.*)", "$U1")  

str := "всЕ слоВА с больШОЙ бУКВы, ОСТАЛЬНЫЕ БУКВЫ строчные"
MsgBox % RegExReplace(str, "(.*)", "$T1")
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

76

Re: AHK: Регулярные выражения и особенности RegExMatch

https://autohotkey.com/docs/commands/StringLower.htm