2014-11-09 2 views
0

У меня этот сегмент xml.Нужно регулярное выражение с использованием PHP

<condition name="gender" value="male"> 
    <condition name="somethingelse" value="somevalue">Target string</condition> 
</condition> 

Вы можете видеть, что они вложены.

Что мне нужно сделать, это получить среднее условие, содержащее «целевую строку».

Люди, вероятно, предложит использовать XML-парсер или что-то в этом роде, но я хочу сделать это с помощью регулярного выражения.

Я перепутал с регулярным выражением, но я просто не знаю их достаточно хорошо.

Возьмите это, например.

$regex = '<condition name="[a-z0-9]+" value="[a-z0-9]+">([^<>].*?)<\/condition>'; 
preg_match_all ('/' . $regex . '/i', $haystack, $stuff); 

То, что я пытался сделать, был матч теги, но игнорировать все, что содержит < или>, таким образом, избегая всего, что не содержит текста.

Мой пример не работает, это просто показать, где я добрался, и теперь я застрял.

Все это делает дать этот матч, поэтому я часть пути туда:

<condition name="gender" value="male"> <condition name="somethingelse" value="somevalue">Target string</condition> 

Может кто-нибудь помочь, пожалуйста?

+1

Если вы знаете, что на самом деле у вас есть XML, как вы пришли к выводу, что для него используется регулярное выражение? – mario

+1

«Люди, вероятно, предложит использовать XML-парсер или что-то в этом роде, но я хочу сделать это с помощью регулярного выражения». Зачем? Это учебное упражнение? – shuttle87

+0

Это XML да, он описывает алгоритм - если я использую синтаксический анализатор xml, я теряю часть данных, которые мне нужны. – Rog

ответ

1

Вот регулярное выражение, которое будет работать (по крайней мере, в простом случае использования вы описанного выше):

$regex = '/<condition name="[a-z0-9]+" value="[a-z0-9]+">([^<>]*)<\/condition>/'; 

Обратите внимание, что я удалил знак вопроса (не уверен, что она предназначалась для) и поместите звездочку после [^<>], а не после периода. Строка [^<>]* говорит, что соответствует нулю или более символов не в наборе {<,>}.

+0

Большое спасибо, что работает. – Rog

Смежные вопросы