Что нового

Поиск по двум словам внутри элементов массива

kilZHlik

Новичок
Сообщения
3
Репутация
0
Здравствуйте уважаемые форумчане.
Суть ситуации в том, что имеется одномерный массив данных с содержимым типа:

$array[$i] = '<PRODUCT> <ID>0042</ID> <TITLE>Самара</TITLE> <PRICE>true</PRICE> </PRODUCT>'
$array[$i] = '<PRODUCT> <ID>7855</ID> <TITLE>Чита</TITLE> <PRICE>false</PRICE> </PRODUCT>'
$array[$i] = '<PRODUCT> <ID>4896</ID> <TITLE>Новокузнецк</TITLE> <PRICE>false</PRICE> </PRODUCT>'
$array[$i] = '<PRODUCT> <ID>0021</ID> <TITLE>Чита</TITLE> <PRICE>true</PRICE> </PRODUCT>'
...

Задача: при условии, что в массиве одновременно присутствует "Чита" и "false", то вывести значение заключенное в теги <ID></ID>
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$a=StringRegExpReplace('<PRODUCT>  <ID>7855</ID>  <TITLE>Чита</TITLE>  <PRICE>false</PRICE>  </PRODUCT>', _
	'(?s).*?<ID>([^<]+).*?<TITLE>Чита.*?<PRICE>false.*','\1')
Select
	Case Not @extended
		MsgBox(32,'','увы')
		Exit
EndSelect
MsgBox(32,'',$a)
 
Автор
K

kilZHlik

Новичок
Сообщения
3
Репутация
0
sngr
Спасибо Вам огромное!
Я въезжал два дня как написать подходящее регулярное выражение, так сам и не осилил :'(
Честно говоря я пока что до конца не понимаю и синтаксис Вашего регулярного выражения... Но работает оно как нужно :ok:
Чуть адаптировал под формулировку темы Ваш пример:


Код:
#include <Array.au3>

 Dim $array[4]
 Dim $colors[4]
 Dim $numbers[4]

 $i = 0
 $array[$i] = '<PRODUCT>  <ID>7855</ID>  <TITLE>Чита</TITLE>  <PRICE>false</PRICE>  </PRODUCT>'

$a=StringRegExpReplace($array[$i], _
    '(?s).*?<ID>([^<]+).*?<TITLE>Чита.*?<PRICE>false.*','\1')
Select
    Case Not @extended
        MsgBox(32,'','увы')
        Exit
EndSelect
MsgBox(32,'',$a)

Тема решена!
Не могу найти как плюсовать репутацию...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
kilZHlik
Почему вы решили применить RegExp к XML формату?
 
Автор
K

kilZHlik

Новичок
Сообщения
3
Репутация
0
Вскрылась еще одна блокирующая проблема :'( некоторые значения написаны в верхнем регистре.
Получается что <TITLE>Чита</TITLE> он находит, а <TITLE>ЧИТА</TITLE> нет.

Garrett
Приходится парсить регулярными выражениями по двум причинам: первая это то, что я практически не умею работать с MSXML, а вторая - то что эта XML-ка жутко муторно-кривая.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
kilZHlik сказал(а):
... некоторые значения написаны в верхнем регистре.
Получается что <TITLE>Чита</TITLE> он находит, а <TITLE>ЧИТА</TITLE> нет.
Вместо (?s) напишите (?si)
 
Верх