У меня есть этот сегмент xml.
<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>
Может ли кто-нибудь помочь?
Вот регулярное выражение, которое будет работать (по крайней мере, в простом случае, описанном выше):
$regex = '/<condition name="[a-z0-9]+" value="[a-z0-9]+">([^<>]*)<\/condition>/';
Обратите внимание, что я удалил вопросительный знак (не уверен, для чего он предназначен) и поставил звездочку после [^<>]
а не после периода. Строка [^<>]*
указывает, что она соответствует нулю или нескольким символам не в наборе {<,>}.