2012-01-16 2 views
-1

Я использую функцию PHP preg_match ...Регулярное выражение с помощью preg_match

  1. Как я могу извлечь текст между тегами. Следующая попытка не получить значение: preg_match("/^<title>(.*)<\/title>$/", $originalHTMLBlock, $textFound);

  2. Как я могу найти первое вхождение следующего элемента и выборки (Гроздь текстов и метки):

    <div id="post_message_"> Гроздь текстов и метки </div>

+0

вы можете использовать https://gist.github.com/1358174, а затем для 1) '// title' и для 2)' // div [id = "post_message"] '. также см. http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662 – Gordon

ответ

3

Это начинает скучно. Regex, скорее всего, не является инструментом выбора для соответствия языкам, таким как HTML, и есть тысячи подобных вопросов на этом сайте, чтобы доказать это. Я не собираюсь ссылаться на ответ, на который все остальные ссылаются - сделайте небольшой поиск и убедитесь сами.

При этом ваше первое регулярное выражение предполагает, что тег <title> - это весь ввод. Я подозреваю, что это не так. Таким образом,

preg_match("#<title>(.*?)</title>#", $originalHTMLBlock, $textFound); 

имеет немного больше шансов на работу. Обратите внимание на ленивый квантификатор, который становится важным, если на вашем входе содержится более одного знака <title>. Что может быть маловероятно для <title>, но не для <div>.

Для вашего второго вопроса у вас есть только рабочий шанс с регулярным выражением, если у вас нет вложенных тегов внутри того, что вы ищете. Если это так, то

preg_match("#<div id=\"post_message_\">(.*?)</div>#", $originalHTMLBlock, $textFound); 

может работать.

Но в целом вам лучше использовать HTML-парсер.

0
  1. использовать это: <title\b[^>]*>(.*?)</title> (? ты уверен, что вам нужно ^ и $)
  2. вы можете использовать одно и то же выражение выражения <div\b[^>]*>(.*?)</div>, если у вас нет тега </div> в тексте Bunch of Texts and Tags. Если да, возможно, вам стоит взглянуть на http://code.google.com/p/phpquery/
Смежные вопросы