2009-06-26 180 views
0

我有這個網站與下面這種類型的這段遍佈:正則表達式解析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之間的文本,並用代碼替換標籤下面。

這是我在REG前刺

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

輸出與回調

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

我嘗試過了上http://rubular.com/,它不做得比較工作。任何建議

+0

爲了便於閱讀,增加了空格 – Greg 2009-06-26 13:32:45

回答

1

你可能想確保你的正則表達式不會貪婪地撿起字符 - 使用「。*?」而不是直「。」。

1

你是什麼意思,「它不工作」?它如何失敗?

建議(未測試您的正則表達式):請注意,*是一個貪婪的運算符,因此.*很少是一個好主意,因爲它可能比您想要的要多得多。

嘗試:

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

想我解決了它從另一個計算器的問題得到一個想法

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

這似乎在http://rubular.com/網站

+0

這與。*相同。 - 例如:`alt =「(。*?)」`會將所有內容匹配到下一個「,但是`alt =」(。*)「`將匹配所有內容」 – dbr 2009-06-26 14:11:57

0

在這裏你去上班: http://rubular.com/regexes/8434

您正面臨兩個潛在問題。首先,不添加// m選項,'。'將不匹配換行符。其次,你正在使用貪婪的匹配。添加'*?'使它更好。

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