Регулярное выражение для разбора HTML-ссылок - PullRequest
0 голосов
/ 26 июня 2009

У меня есть этот HTML с этим типом фрагмента ниже по всему:

<li><label for="summary">Summary:</label></li>
<li class="in">
    <textarea class="ta" id="summary" name="summary" rows="4" cols="10" tabindex="4">
        ${fieldValue(bean: book, field: 'summary')}</textarea> 

    <a href="#" class="tt">
        <img src="<g:createLinkTo dir='images/buttons/' file='icon.gif'/>" alt="Help icon for the summary field">
        <span class="tooltip">
            <span class="top"></span>
            <span class="middle">Help text for summary</span>
            <span class="bottom"></span>
        </span>
    </a>
</li>

Я хочу извлечь значение alt и текст между XXXX и заменить тег тегом ниже.

Это мой удар по рег от

<a href="#" class="tt">.*alt="(.*)".*<span class="middle">(.*)<\/span><\/a>

Вывод с обратными вызовами

<ebs:cssToolTip alt="$1" text="$2"/>

Я опробовал его на http://rubular.com/, и он не совсем работает. Любые предложения

Ответы [ 4 ]

1 голос
/ 26 июня 2009

Что вы имеете в виду, "это не совсем работает"? Как это терпит неудачу?

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

Попробуйте:

<a href="#" class="tt">.*alt="([^"]*)".*<span class="middle">([^"]*)<\/span><\/a>
1 голос
/ 26 июня 2009

Думаю, я решил это, получив идею из другого вопроса stackoverflow

<a href="#" class="tt">.*alt="([^"]*)".*<span class="middle">([^<]*).*<\/a>

Это похоже на работу http://rubular.com/ сайта

1 голос
/ 26 июня 2009

Возможно, вы захотите убедиться, что ваше регулярное выражение не жадно подбирает символы - используйте ". *?" а не прямой ". *".

0 голосов
/ 26 июня 2009

Вот, пожалуйста, http://rubular.com/regexes/8434

Вы столкнулись с двумя потенциальными проблемами. Во-первых, без добавления опции // m, '.' не будет соответствовать символам новой строки. Во-вторых, вы использовали жадное сопоставление. Добавление '*?' делает это лучше.

/<a href="#" class="tt">.*?alt="([^"]*)">.*?<span class="middle">(.*?)<\/span>/m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...