2010-09-01 2 views
3

У меня есть небольшая проблема, я хочу найти вКак заставить это регулярное выражение работать?

<tr><td>3</td><td>foo</td><td>2</td>

Foo, я использую:

$<tr><td>\d</td><td>(.*)</td>$

найти Foo, но не работают, потому что Dont матч с </td> в конце foo, но с </td> в конце строки

+5

Вообще говоря, вы захотите использовать настоящий синтаксический анализатор html, а не регулярное выражение. См.: Http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Seth

+0

@Seth, другие: Хорошо, говоря, что HTML-парсер в качестве * комментарий * - это способ пойти, а не тратить на это ответ неправильно. Хорошее шоу. –

+1

Кроме того: кто пытается опротестовать вопрос? Это хороший вопрос, хорошо спрошенный. (+1 к офсету) –

ответ

2

Вы должны сделать .* ленивыми вместо жадным. Узнайте больше о ленивом и жадном here.
Ваш конец струнных якорей ($) также не имеет смысла. Попробуйте:

<tr><td>\d<\/td><td>(.*?)<\/td> 

(. Как видно на rubular)

Примечание: Я не сторонник использования регулярных выражений для разбора HTML. Но несколько раз задача под рукой достаточно проста, чтобы ее можно было обработать с помощью регулярного выражения, для которого полноразмерный XML-парсер переполнен (например, этот вопрос). Знание выбрать «правильный инструмент для работы» - важный навык программирования.

+2

Объясните нижний план. – NullUserException

+0

Я просто скажу, что это был не я (хотя я сделал downvote еще одно сообщение для того, чтобы сказать, что HTML не является регулярным и не должен анализироваться с регулярным выражением). Вы действительно отвечаете на вопрос. (EDIT: +1 для вас) –

+0

+1 Хороший ответ и спасибо, что поймали мою ошибку. – Senseful

0

Использование:

^<tr><td>\d</td><td>(.*?)</td> 

(вставка обязательно комментарий о не используя регулярное выражение для разбора XML)

0

Ваш ведущий $ должен быть ^.

Если вы не хотите соответствовать всему пути до конца строки, не используйте $ в конце. Однако, поскольку * жадный, он будет хватать как можно больше. Некоторые реализации регулярных выражений имеют не жадную версию, которая будет работать, но вы, вероятно, просто хотите изменить (.*) на ([^<]*).

+0

Действительно, мне любопытно, что было неправильно в этом ответе, чтобы потребовать понижение. Увы. –

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

  • Нет связанных вопросов^_^