Regex, чтобы найти ярлыки - PullRequest
       2

Regex, чтобы найти ярлыки

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

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

со следующим регулярным выражением:

<asp:[a-z]+.*? ID="(?<id>.*?)".*? Text="(?<text>.*?)".*?/>

и следующий образец текста:

<asp:Label ID="SomeID" Text="SomeText" />
<asp:Label Text="SomeText" />
<asp:Label ID="SomeID" />
<asp:Label ID="SomeOtherID" Text="Some Other Text" />

Я получаю следующие совпадения:

   1. "<asp:Label ID="SomeID" Text="SomeText" />" has 2 groups:
         1. "SomeID"
         2. "SomeText"
   2. "<asp:Label Text="SomeText" /> <asp:Label ID="SomeID" /> <asp:Label ID="SomeOtherID" Text="Some Other Text" />" has 2 groups:
         1. "SomeID"
         2. "Some Other Text"

Первый, очевидно, правильный, но я не уверен, почему появляется # 2.

И следующее регулярное выражение находит только первую метку («SomeID»), но не четвертую («SomeOtherID»):

<asp:[a-z]+ (?!.*<[a-z]).*? ID="(?<id>.*?)".*? Text="(?<text>.*?)".*?/>

1 Ответ

2 голосов
/ 17 ноября 2009

Попробуйте заменить .* s в вашем выражении на [^>]*, чтобы избежать пересечения границ HTML-тегов. Проблема в том, что .*? в середине вашего выражения соответствует /> <asp:Label ID="SomeOtherID".

Возможно, что-то вроде этого:

<asp:[a-z]+\s*ID="(?<id>[^"]*)"\s*Text="(?<text>[^"]*)"[^/]*/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...