Захватить только один матч - Regex - PullRequest
0 голосов
/ 04 октября 2009

я хочу захватить только первое совпадение через выражение

<p>.*?</p>

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

Ответы [ 2 ]

4 голосов
/ 04 октября 2009

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

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

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

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

2 голосов
/ 04 октября 2009

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

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

При запуске этой программы будет напечатано 1.

...