Если предположить, что у вас есть параграф в параграфах, который нарушает формат XML, или вы просто хотите узнать немного больше о разборе регулярных выражений, то это должно выполнить работу для примера, который вы вывешенный. Это не особенно надежно, но именно поэтому людям нравится использовать XML, потому что у него есть формальный синтаксис, который облегчает анализ. или проще, во всяком случае. В частности, это решение зависит от строки, которая анализируется, начиная с тега абзаца и заканчивая тегом закрытия абзаца, а также от того, что между каждой парой абзацев есть только пробел. Так что это очень буквальное решение проблемы вашего примера. Но тогда, поскольку это единственный существующий документ спецификации для вашего пользовательского формата данных, это было лучшее, что я мог сделать:)
$string = " <paragraph>apples are red...</paragraph> <paragraph>john is a boy..</paragraph> <paragraph>this is dummy text......</paragraph> ";
$paragraphs = preg_replace('/(^\s*<paragraph>|<\/paragraph>\s*$)/', '', preg_split('/(?<=<\/paragraph>)\s*(?=<paragraph>)/', $string));
Здесь происходит то, что вы используете в вызове функции preg_split обратные утверждения нулевой ширины, чтобы найти начало и конец каждого абзаца, а затем вызываете preg_replace, чтобы вырезать теги из начала и конца каждый кусок В итоге вы получите содержимое $paragraphs
, являющееся
array (
0 => 'apples are red...',
1 => 'john is a boy..',
2 => 'this is dummy text......',
)