1

Тема: AHK: RegExMatch

Здравствуйте. У меня такая проблема. Я хочу считать информацию из файла, переменная - chat. Из "SMS: a | Получатель: Benjamin_Segal [т.708020]" надо считать текст от "SMS:" до первого "|", потом от "Получатель:" до "[" и от "[т." до "]". Помогите пожалуйста.

2 (изменено: Desire, 2014-07-24 23:01:10)

Re: AHK: RegExMatch

chat := "SMS: a | Получатель: Benjamin_Segal [т.708020]"
MsgBox, % RegExReplace(chat, ".*SMS:(.*)\|.*", "$1")
MsgBox, % RegExReplace(chat, ".*Получатель:(.*)\[.*", "$1")
MsgBox, % RegExReplace(chat, ".*\[(.*)].*", "$1")

3

Re: AHK: RegExMatch

Desire похвально. Ну а если такая строка:

sms := "SMS: a | Получатель: Benjamin_Segal [т.708|[02[0]"
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: RegExMatch

serzh82saratov пишет:

Desire похвально. Ну а если такая строка:

sms := "SMS: a | Получатель: Benjamin_Segal [т.708|[02[0]"

Такой не может быть, номер состоит только из цифр

5

Re: AHK: RegExMatch

и от "[т." до "]"

А почему это не указано в задании?
Как можно понять, что тут может быть только число (номер это что?).

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: RegExMatch

serzh82saratov пишет:

Desire похвально. Ну а если такая строка:

sms := "SMS: a | Получатель: Benjamin_Segal [т.708|[02[0]"

sms := "SMS: a | Получатель: Benjamin_Segal [т.708|[02[0]"

MsgBox, % RegExReplace(sms, ".*\s\[(\d+)].*", "$1")

Не работает, а если вместо \d+ поставить .*, то выдает все. что между этих скобок :С

7

Re: AHK: RegExMatch

sms := "SMS: a | Получатель: Benjamin_Segal [т.708|02[0]"

MsgBox, % RegExReplace(sms, ".*?SMS:(.*?)\|.*", "$1")
MsgBox, % RegExReplace(sms, ".*Получатель:(.*?)\[.*", "$1")
MsgBox, % RegExReplace(sms, ".*\[т\.(.*)].*", "$1")
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: RegExMatch

serzh82saratov пишет:
sms := "SMS: a | Получатель: Benjamin_Segal [т.708|02[0]"

MsgBox, % RegExReplace(sms, ".*?SMS:(.*?)\|.*", "$1")
MsgBox, % RegExReplace(sms, ".*Получатель:(.*?)\[.*", "$1")
MsgBox, % RegExReplace(sms, ".*\[т\.(.*)].*", "$1")

Так ведь все символы считывает. Я думал, что Вы говорите считать только цифры

А вот как сделать, чтобы только цифры считало? Мне просто интересно, а то с \d что-то у меня не выходит

9

Re: AHK: RegExMatch

А вот как сделать, чтобы только цифры считало?

Какие? Из [т.708|02[0] надо 708? Или 708020?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: RegExMatch

serzh82saratov пишет:

А вот как сделать, чтобы только цифры считало?

Какие? Из [т.708|02[0] надо 708? Или 708020?

Ну чтобы все цифры (708020), а то у меня не работает ни с \d ни с \d+

11

Re: AHK: RegExMatch

Решил не создавать отдельную тему, поэтому спрашиваю тут - почему RegExMatch() плохо работает с большим объемом текста(~100мб)? Я хочу найти текст, между одной строкой и другой:

RegExMatch(file, "\Q" t1 "\E(.*)\Q" t2 "\E", result)

Выдает совсем не то, что нужно. С малым объемом текста работает нормально.

Как сказал мой дед - Я твой дед

12

Re: AHK: RegExMatch

Почему не знаю, но замечал такие промахи и на небольших текстах, например при обработке HTML.
Для простых строк подойдёт InStr - http://forum.script-coding.com/viewtopi … 171#p83171.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: RegExMatch

Спасибо, теперь корректно все отображает.

Как сказал мой дед - Я твой дед

14 (изменено: Alectric, 2014-08-05 12:46:18)

Re: AHK: RegExMatch

Столкнулся с проблемой: если в строке поиска присутствует несколько переменных и в одной из переменной содержится метасимвол, то поиск заканчивается неудачей.
Есть ли какое-нибудь решение кроме предварительной "очистки" переменной?

Class=gsehd:gdsdag3223
process=wewe.exe

Title=Просто текст.
gosub,a
Title=(Текст в скобках.)
gosub,a
return

a:
a:=b:=Title . "|" . Class . "|" . process . "`n"
a.="Следующая строка подобная`n"
msgbox,До`n%a%

a:=RegExReplace(a, Title . "\|" . Class . "\|" . process . "`n" ,"")
msgbox,1После`n%a%
a:=RegExReplace(a, b ,"")
msgbox,2После`n%a%
return

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

15

Re: AHK: RegExMatch

Появилась небольшая проблемка, нужно как-то найти в тексте несколько похожих частей и сохранить в переменную:

code = 
(
<td class="threadNametd"><a class="threadL" href="http://link.com">Name Password</a> <span class="post">[ <a class="postPSwithcesLink" href="http://link2.com">1</a>  <a class="postPSwithc" href="http://link3.com">2</a> ]</span> </td>
потом идёт какой-то текст
ыфвыввыв
ывф
ыввывввв
и снова
<td class="threadNametd"><a class="threadLerr" href="http://linked1.com">Name Password</a> <span class="post">[ <a class="postPSwithcesLink" href="http://linked2.com">1</a>  <a class="postPSwithc" href="http://linked3.com">2</a> ]</span> </td>
но уже ссылки там другие будут
)
RegExMatch(code, "<td class=""threadNametd"">(.*?)</td>", block)
MsgBox, % block

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

Как сказал мой дед - Я твой дед

16 (изменено: Alectric, 2015-01-07 22:38:24)

Re: AHK: RegExMatch

Может так:

code =
(
<td class="threadNametd"><a class="threadL" href="http://link.com">Name Password</a> <span class="post">[ <a class="postPSwithcesLink" href="http://link2.com">1</a>  <a class="postPSwithc" href="http://link3.com">2</a> ]</span> </td>
потом идёт какой-то текст
ыфвыввыв
ывф
ыввывввв
и снова
<td class="threadNametd"><a class="threadLerr" href="http://linked1.com">Name Password</a> <span class="post">[ <a class="postPSwithcesLink" href="http://linked2.com">1</a>  <a class="postPSwithc" href="http://linked3.com">2</a> ]</span> </td>
но уже ссылки там другие будут
)
loop,parse,code,`n
{
  RegExMatch(a_loopfield, "<td class=""threadNametd"">(.*?)</td>", block)
  if block!=
    b.=a_index ": " block "`n"
}

MsgBox, % b

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

17

Re: AHK: RegExMatch

В моём файле(исходный код страницы) всё-равно находит просто одну первую часть этим примером.

Как сказал мой дед - Я твой дед

18 (изменено: Malcev, 2015-01-07 23:11:59)

Re: AHK: RegExMatch

А так?

code = 
(
<td class="threadNametd"><a class="threadL" href="http://link.com">Name Password</a> <span class="post">[ <a class="postPSwithcesLink" 

href="http://link2.com">1</a>  <a class="postPSwithc" href="http://link3.com">2</a> ]</span> </td>
потом идёт какой-то текст
ыфвыввыв
ывф
ыввывввв
и снова
<td class="threadNametd"><a class="threadLerr" href="http://linked1.com">Name Password</a> <span class="post">[ <a class="postPSwithcesLink" href="http://linked2.com">1</a>  <a class="postPSwithc" href="http://linked3.com">2</a> ]</span> </td>
но уже ссылки там другие будут
)

Pos = 1
While Pos := RegExMatch(code, "<td class=""threadNametd"">(.*?)</td>", block, pos+StrLen(block))
   match .= block1 "`n"
MsgBox, % match

19

Re: AHK: RegExMatch

Вот теперь всё отлично находит, спасибо.

Как сказал мой дед - Я твой дед