2009-10-04 3 views
0

я хочу, чтобы захватить только первый матч через выражениеЗахват одного матча только - Regex

<p>.*?</p> 

я попытался <p>.*?</p>{1}, но он не работает она возвращает все р-теги, которые в HTML документе, пожалуйста, помогите

+0

Почему вы используете регулярное выражение для захвата внутреннего содержимого элемента? И на каком языке это? PHP? –

+0

Что возвращает все матчи? – Gumbo

ответ

4

Похоже, вы используете метод, который возвращает каждое соответствие в строке с заданным регулярным выражением, так что вам нужно привязать регулярное выражение к началу строки, чтобы он не возвращал каждое совпадение, но только первый:

^.*?<p>.*?</p> 

Используйте скобки для захвата того, что вы хотите захватить.

PS: Здесь идет стандартный «избегать использования регулярных выражений для разбора HTML-кода, используйте правильный совет парсера HTML. Это простое регулярное выражение не удастся для вложенных <p> разделов (которые я не помню, если они действительны в HTML, но все же вы можете получить их, даже если они не являются).

+0

Я попробовал, его не работаю, спасибо в любом случае – shabby

+0

Добавляем больше контекста к вопросу, тогда какой язык вы используете, какой код вы пытаетесь, каковы ваши входные данные ... –

+0

Я могу только предупредить предупреждение Винько, но это может быть возможно тонкой настройки регулярного выражения. На каком языке вы используете? – pavium

2

Метод Regex.Match делает это по умолчанию, и правильное выражение является правильным.

Regex regex = new Regex("<p>(.*?)</p>"); 
Match match = regex.Match("<p>1</p><p>2</p>"); 
Console.WriteLine("{0}", match.Value); 

Запуск этой программы будет печатать 1.

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