Я пытаюсь заменить все между двумя тегами, но я не могу построить правильное выражение.
Это то, что я сделал: /<tag>(.*|\n*)</tag>/
Я хочу, чтобы он захватывал любые символы, включая разрывы строк.
Это пример того, что мне нужно сделать:
<tag> <div class="feed_title">Some Title</div> <div class="feed_content">Some text</div> </tag>
Могут ли некоторые из вас рассказать мне, что я делаю неправильно?
Вот ссылка на RegExr и полный пример того, как выглядит контент: http://regexr.com?2t4n1
'#.#m'
M означает MULTILINE, это делает точку способной соответствовать новым символам = разрывы строк \ n
РЕДАКТИРОВАТЬ:
поскольку он был исправлен острыми глазами и хорошим мозгом, он, очевидно, «#. + # s»
EDIT2:
Как сказал Майкл Голдштейн, это должно сработать
$ch = '<tag>\s+<div class="feed_title">Some Title</div>\s+<div class="feed_content">Some text</div>\s+</tag>' preg_match('#<tag>(.+?)</tag>#s',$ch,$match)
Существует другое решение, без флага s , я думаю:
preg_match('#<tag>((.|\s)+?)</tag>#',$ch,$match)
Но это сложнее
,
ИЗМЕНИТЬ 3:
Я думаю, что присутствие \ s в $ ch является бессмыслицей. \ s используется в RE, а не в строках.
Я написал это, потому что думал, что это могут быть пробелы или \ t, которые могут быть до < tag > и в начале других строк
\ t записывается с выходом; это не повод писать \ s также в строке
Возможно, вы хотели это сделать?
# The ... in this example is your text to match preg_match("#<tag>(.*?)</tag>#s","...",$matches);
Вот ссылка на статью об извлечении данных XML с использованием регулярных выражений с использованием PHP, в которой есть несколько хороших примеров.