Выберите первый тег абзаца, не содержащийся в другом теге, используя RegEx (в стиле Perl)

У меня есть этот блок HTML:

<div>
  <p>First, nested paragraph</p>
</div>
<p>First, non-nested paragraph.</p>
<p>Second paragraph.</p>
<p>Last paragraph.</p>

Я пытаюсь выбрать первый невложенный абзац в этом блоке. Я использую preg_match PHP (стиль perl), чтобы найти его, но не могу понять, как игнорировать тег p, содержащийся в div.

Это то, что у меня есть до сих пор, но оно выбирает содержимое первого абзаца, содержащегося выше.

/<p>(.+?)<\/p>/is

Спасибо!

РЕДАКТИРОВАТЬ

К сожалению, у меня нет такой роскоши, как парсер DOM.

Я полностью признателен за предложения не использовать RegEx для синтаксического анализа HTML, но это не очень помогает моему конкретному варианту использования. У меня очень контролируемый случай, когда внутреннее приложение генерировало структурированный текст.Я пытаюсь заменить текст, если он соответствует определенному шаблону. Это упрощенный случай, когда я пытаюсь игнорировать текст, вложенный в другой текст, и HTML был самым простым случаем, который я мог придумать для объяснения. Мой реальный случай выглядит примерно так (но гораздо больше данных и уменьшено):

#[BILLINGCODE|12345|11|15|2001|15|26|50]#
[ITEM1|{{Escaped Description}}|1|1|4031|NONE|15]
#[{{Additional Details }}]#
[ITEM2|{{Escaped Description}}|3|1|7331|NONE|15]
[ITEM3|{{Escaped Description}}|1|1|9431|NONE|15]
[ITEM4|{{Escaped Description}}|1|1|5131|NONE|15]

Мне нужно переформатировать определенный столбец определенных строк в тонну строк, подобных этому. Ответ на мой первый вопрос поможет реальному проекту.

0
задан Workman 13 December 2011 в 23:31
поделиться