1 (изменено: WATKINS, 2016-09-07 17:48:19)

Тема: Выборка спец. символов при RegExMatch() для GTA:SA

Часть кода, который отвечает за то, чтобы изымать нужные слова из определенных строк не выводит некоторые спец. символы. Помогите решить этот вопрос. Собственно, часть кода:

RegExMatch(A_LoopReadLine, "\[\d+:\d+:\d+] \[A] (.*)\[(.*)]: ([a-zA-Z0-9_ \+/]*)", Match) 
SendInput, {left 100}{Shift Down}{right 100}{Shift Up}{Backspace}{enter}
sleep 20
SendMessage, 0x50,, 0x4190419,, A 
SendInput, {f6}%Match3% от %Match1%{enter}

При выводе с переменной Match3 пропускает символ "+".
Например, из строки "[20:20:20] [A] Name_Surname[ID]: Hello+World" выведет лишь "HelloWorld от Name_Surname". Почему?

С нетерпением жду ответа. Спасибо

2 (изменено: Flasher, 2016-09-07 20:20:07)

Re: Выборка спец. символов при RegExMatch() для GTA:SA

А Match3 вообще тут нужен?

RegExMatch(A_LoopReadLine, "\[A\] (.+): (.+)$", Match)
; тут остальное
SendInput, {f6}%Match2% от %Match1%{enter}

3

Re: Выборка спец. символов при RegExMatch() для GTA:SA

Flasher
Проверил вашу часть кода, не срабатывает.
Строка: "[20:20:20] [A] Name_Surname[1]: /warn 10 +C" выводится в чат игры как "/warn 10 C от Name_Surname".

4

Re: Выборка спец. символов при RegExMatch() для GTA:SA

Скрипт из первого поста работает правильно:

a := "[20:20:20] [A] Name_Surname[ID]: Hello+World"
RegExMatch(a, "\[\d+:\d+:\d+] \[A] (.*)\[(.*)]: ([a-zA-Z0-9_ \+/]*)", Match)
msgbox %Match3% от %Match1%

5

Re: Выборка спец. символов при RegExMatch() для GTA:SA

Ну, так и то работает:

Var := "[20:20:20] [A] Name_Surname[ID]: Hello+World"
RegExMatch(Var, "\[A\] (.+): (.+)$", match)

MsgBox %Match2% от %Match1%

6

Re: Выборка спец. символов при RegExMatch() для GTA:SA

Замените:

SendInput, {f6}%Match3% от %Match1%{enter}

на:

SendInput, {f6}{raw}%Match2% от %Match1%
SendInput, {enter}

7

Re: Выборка спец. символов при RegExMatch() для GTA:SA

Malcev , Flasher
Спасибо, парни, что не прошли мимо и натолкнули на верную мысль.
В общем, беда в том, что метод вывода "SendInput" по каким-то причинам не выводит спец. символы "\.*?+[{|()^$".

Для тех, кто столкнется с такой же проблемой:

Решил проблему, узнав что в msg выводит, дополнением AHK для GTA:SA под названием "SAMP UDF 0.3.7", использовав другой метод вывода в чат под названием: SendChat().

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

8

Re: Выборка спец. символов при RegExMatch() для GTA:SA

WATKINS пишет:

беда в том, что метод вывода "SendInput" по каким-то причинам не выводит спец. символы

Эти причины общеизвестны. !+^# - это модификаторы. Буква, идущая следом за любым из них, будет отрабатывать как комбинация. Чтобы это исключить, спереди последовательности символов ставится {Raw}.

9

Re: Выборка спец. символов при RegExMatch() для GTA:SA

!+^# - это модификаторы. Буква, идущая следом за любым из них

Еще эти:
{}

10

Re: Выборка спец. символов при RegExMatch() для GTA:SA

С этими есть одна хитрая история. SendInput +[{блабла даст {блабла}.

11

Re: Выборка спец. символов при RegExMatch() для GTA:SA

Можно так еще:

f1::
a := "{!}+"
SendInput % Raw(a)
return

Raw(var)
{
   return RegExReplace(var, "([!\+\^#\{}])", "{$1}")
}