2015-07-14 2 views
0

Я написал регулярное выражение, чтобы получить первые два абзаца из базы данных, который хранит его содержимое в формате HTML.RegEx заменить не работает в PHP

Я проверил с этим интернетом RegEx строитель/шашком here и here, и они оба, кажется, делать то, что я хочу, чтобы они сделали (я изменил RegEx немного, так как эти шашки для обработки нового форматирования строки, которые я . нашли после

Однако, когда я иду, чтобы использовать это в моем PHP это, кажется, не хотят, чтобы получить только группу я после, и вместо того, чтобы все матчи

Вот моя preg_replace линия:.

$description = preg_replace('/(^.*?)((<p[^>]*>.*?<\/p>\s*){2})(.*)/', "$2", $description); 

А вот мое содержание тестирования в формате содержания я получаю

<p> 
    Paragraph 1</p> 
<p> 
    Paragraph 2</p> 
<p> 
    Paragraph 3</p> 

Я имел взгляд на this SO сообщения, которое не помогло.

Любые идеи?

EDIT

Как отмечается в одном из комментариев вы можете не Regex HTML в PHP (не знаю почему, я не очень беспокоили этим).

Теперь я открываю вариант для его получения в PL/SQL.

select 
    DBMS_LOB.substr(description, 32000, 1) /* How do I make this into a regular expression? */ 
from 
    blog_posts 
+0

Там другая SO пост на этом вопросе, который довольно хорошо известно, это один: http://stackoverflow.com/q/1732348/521598 – mishu

+0

Почему Wouldn» • Для вас работает парсер DOM? Regex не следует использовать для обработки HTML. – npinti

+0

Я только хочу получить первые 2 абзаца из CLOB в базе данных, но я не хочу менять этот CLOB, потому что следующая страница будет включать все это, его для предварительного просмотра блога. Текст возвращается как чистый HTML, и я решил, что это нужно сделать, прежде чем загружать его на страницу. –

ответ

1

Вы можете взглянуть на PHP Simple DOM Parser. Судя по их manual, вы могли бы сделать что-то вроде этого:

$html = str_get_html('your html string'); 
foreach($html->find('p') as $element) //This should get all the paragraph elements in your string. 
     echo $element->plaintext. '<br>'; 
+0

Это круто, я изменил его, чтобы сделать регулярное выражение в заявлении выбора PL/SQL, а не в PHP в соответствии с точкой @mishu. –

+0

@ ZachRoss -Clyne: По-прежнему не рекомендуется обрабатывать HTML с помощью регулярного выражения, независимо от того, на каком уровне это выполняется. – npinti

+0

Я не совсем понимаю почему. Если мне нужны первые 2 абзаца строки, отформатированной в HTML, нет другого способа сделать это. Я пробовал просто читать текст, но это не работает, потому что, если я на полпути через абзац, когда чтение отключается, я оставляю сломанную страницу. –

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