2009-06-26 101 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