Проблема с использованием регулярных выражений для извлечения текста - PullRequest
0 голосов
/ 07 августа 2009

Мне нужно извлечь из следующих строк кода

<label for="<%=foobar.bar %>">Password:</label>

<label for="foobar">Password:</label>

Мне нужно извлечь foobar, я могу использовать это: (?<=for=")[^"]+(?=(")), чтобы извлечь:

<%=foobar.bar %>

и

foobar

но я не хочу <%= или .bar, и если я пытаюсь создать (?<=for=")[^"]+(?=(")) | (?<=for="<%=)[^"]+(?=(")), это не сработает, потому что ярлык с <%= удовлетворяет обоим условиям, и я не думаю, что вы можете использовать исключающее? С этим кто-нибудь может мне помочь?

Merci:)

Ответы [ 2 ]

1 голос
/ 07 августа 2009

Я считаю, что лучше не создавать супер-регулярных выражений. Выполните свою задачу в несколько этапов:

  1. Извлечение <%=foobar.bar %> или foobar с вашим регулярным выражением (?<=for=")[^"]+(?=("))
  2. Проверьте, соответствует ли результат регулярному выражению, например <%=([\w]+)\.bar\s*%>.
  3. Если он использует $1 группу из совпадения, в противном случае используйте результат шага 2.
  4. Вы получаете Foobar
0 голосов
/ 07 августа 2009

Вы можете попробовать это:

(?<for="(<%=)?)[^" ]*(?=( %>)?")

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

(?<for="(<%=)?)[^"]*?(?=( %>)?")

Для использования не жадной формы [^"]*

...