Пожалуйста, объясните это регулярное выражение - PullRequest
0 голосов
/ 16 ноября 2009

У меня есть регулярное выражение, которое гласит:

@"<img\s*[^>]*>(?:\s*?</img>)?

Может кто-нибудь объяснить эту часть: (?: \ S *?)?

Что это?

Ответы [ 4 ]

9 голосов
/ 16 ноября 2009

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

(?: = match but don't capture

\s*? = any number of whitespace (not greedy)

</img> = close image tag

)? = zero or one times

:)

1 голос
/ 16 ноября 2009

(?:\s*?) выбирает любой пробел, если он существует, после тега изображения. ?: в начале говорит механизму регулярных выражений не захватывать эту группу (то есть она не будет возвращена в массиве совпадений)

0 голосов
/ 16 ноября 2009

Полное выражение будет захватывать любые теги <img>, которые имеют соответствующие теги </img> (но он не захватывает закрывающие теги). Он не захватывает закрывающие теги, потому что синтаксис (?:) означает «совпадать, но не захватывать».

Некоторые ограничения, которые являются частью этого регулярного выражения:

  1. \s* в открывающем теге является избыточным, потому что [^>]* также будет захватывать это
  2. Допускается только пробел между открывающим и закрывающим тегами

Некоторые примеры:

  • <img> будет не соответствует
  • <img></img> будет соответствовать, но только захват <img>
  • <img attr="123"></img> будет соответствовать, но только захват <img attr="123">
  • <imgabc></img> будет не соответствует
  • <img> </img> будет соответствовать, но только захватить <img>
  • <img>ab</img> будет не соответствует

Я настоятельно рекомендую бесплатный конструктор регулярных выражений, который можно бесплатно загрузить по адресу www.radsoftware.com.au для тестирования регулярных выражений

0 голосов
/ 16 ноября 2009

группа без захвата из любого количества пробельных символов с последующим закрывающим тегом img

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...