Что нового

[RegExp] Повторяющаяся группа в определенной строке

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Добрый день.
Подскажите, как заставить группу захватить все значения в кавычках? Вроде * после группы должна ее заставить несколько раз отработать.
В данный момент только s2 в массив попадает.
Код:
$a='data["a1","b3","c5","s2"]'
$a=StringRegExp($a,'data\[("[^"]*?",?)*\]',3)
_ArrayDisplay($a)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
StringRegExp($a, '(?s)"(.*?)"', 3)

возможно
 
Автор
R

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
joiner сказал(а):
Код:
StringRegExp($a, '(?s)"(.*?)"', 3)

возможно
В
Код:
'data["a1","b3","c5","s2"], test["r1","g3","z5","v2"]'
оно сожрет все значения, а надо например только в data взять.
Еще уточню, мне нужно понять можно ли сделать это одной регуляркой и как, а сами данные я могу вытащить например применив 2 регулярки.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include 'array.au3'
$file='data["a1","b3","c5","s2"], test["r1","g3","z5","v2"]'
$str=StringRegExp($file,'data[^\]]+"([^",]+)","([^",]+)","([^",]+)","([^",]+)"',3)
_ArrayDisplay($str)
 
Автор
R

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
sngr сказал(а):
Код:
#include 'array.au3'
$file='data["a1","b3","c5","s2"], test["r1","g3","z5","v2"]'
$str=StringRegExp($file,'data[^\]]+"([^",]+)","([^",]+)","([^",]+)","([^",]+)"',3)
_ArrayDisplay($str)

Спасибо, но под определенное кол-во значений это понятно, но их может быть сколько угодно, а не 4, как я для примера привел.
 
Автор
R

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Alofa сказал(а):
[А чего еще может быть? Зачитайте весь список пожалуйста.
Например:
1.
[box title=Парсинг html]<table id="Нужная таблица, но их в может быть несоклько с разными названиями">
<tr>Нужные значения</tr>
<tr>Которых может быть кто его знает сколько</tr>
</table>[/box]

2.
[box title=Парсинг JSON]Нужная группа["значения","которых может быть","кто его знает","сколько"], test["r1","g3","z5","v2"][/box]

Смысл один, в определенном предложении найти повторяющиеся по шаблону слова.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <Array.au3>

$sStr = 'data["a1","b3","c5","s2"], test["r1","g3","z5","v2"]'
$aRet = StringRegExp($sStr, '\G(?:"([^"]+)")+(?:\h*,\h*|\h*\])|data\[\h*', 3)

_ArrayDisplay($aRet)
 
Верх