Что нового

[Данные, строки] Получаем из ответа нужное число с помощью StringRegExp.

Gzzk

Новичок
Сообщения
104
Репутация
1
И снова здравствуйте.
Напилил уже кучу однотипных тем,но так и не разобрался с шаблонами для StringRegExp.И описание функции читал,и гуглил,а более-менее понятного гайда так и не нашёл.Есть хоть где-нибудь понятный гайд по этой функции?

Есть такой текст:
Код:
HTTP/1.1 200 OK
Date: Sun, 24 Mar 2013 11:15:38 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze14
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf8

10
{"error_code":2}
0
Из него нужно получить цифру,которая находится между '"error_code":' и '}'.
Пытался сделать так:
Код:
$res_array = StringRegExp($sData, 'code":.{1}.}', 3)

Не вышло.
Помогите пожалуйста!
Заранее благодарю.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Gzzk

Код:
$res_array = StringRegExp($sData, 'code":(\d{1,})\}', 3)


() - ищем то, что в скобках
\d - любая цифра
{1,} - указывает количество этих цифр(или других символов) - в данном случае от 1 и до бесконечности, а можно {1, 3} - от 1 до 3, или, например, {1} - только один символ
\} - т.к. } служебный символ, то перед ним нужно поставить \, чтобы убрать этот специальный смысл
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Gzzk,
Или так.
Код:
$sText = FileRead(@ScriptDir & '\test.txt')
$sError = StringRegExpReplace($sText, '(?is).*_code\D{2}(\d+)\D.*', '${1}');'(?is).*_code\D{2}(\d)\D.*' для одной цифры
If @extended = 1 Then
	ConsoleWrite($sError & @LF)
Else
	ConsoleWrite('error' & @LF)
EndIf
 
  • Like
Реакции: Norm

GuRuS

Новичок
Сообщения
4
Репутация
0
Здравствуйте!
У меня похожая проблема. Есть огромная строка. Где то в середине:
Код:
Артефакты
Характеристики 41+16.8251+23.0245+0.9036+0.7236+0.72Слава:
43+55Статистика
Нужно найти 5 двухзначных чисел, которе стоят между слов "Характеристики", "Статистика" и перед знаком "+".

Код:
$hps = StringRegExp($text,'Характеристики (\d{1,2})\+',3)
 MsgBox(64, 'Info', $hps)


Пробовал делать так. Но не выходит. Почему то равно 1.
Заранее спасибо!
 

GuRuS

Новичок
Сообщения
4
Репутация
0
Спасибо огромное за ответ. Не совсем то, но вы натолкнули на правильный путь.

Код:
#include <Array.au3>
$hps = StringRegExp('Артефакты Характеристики 41+16.8251+23.0245+0.9036+0.7236+0.72Слава: 43+55Статистика', '.(\d{1,2})\+, 3)
_ArrayDisplay($hps)


Брать первые 5 значений из массива. Готово! :ok:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
GuRuS
и чем ваш вариант отличается? :smile: добавили точку которая подходит к любому символу, но вынесли ее за скобки? кажется это полная ерунда :scratch:
 

GuRuS

Новичок
Сообщения
4
Репутация
0
В моем случае выводится полный массив с числами по условию которое я задавал. В предыдущем случае выводилось только первое число т.е. 41
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Это бред какой-то!
В предложенном примере чисел, удовлетворяющих условию задачи, всего два - 41 и 43.
:shaman_s_bubnom:
 
Верх