2009-06-26 7 views
0

Je possède ce html avec ce type de snippit ci-dessous partout:expression régulière pour analyser des liens 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> 

Je veux retirer la valeur alt et le texte entre XXXX et remplacez la balise avec le code au dessous de.

Ceci est mon coup de poignard au reg ex

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

sortie avec les callbacks

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

Je l'ai essayée sur http://rubular.com/ et il ne fonctionne pas tout à fait. Toutes les suggestions

+0

Espace blanc ajouté pour plus de lisibilité – Greg

Répondre

1

Vous souhaiterez peut-être vous assurer que votre expression rationnelle ne récupère pas les caractères avec avidité - utilisez ". *?" plutôt que directement ". *".

1

Que voulez-vous dire, "ça ne marche pas tout à fait"? Comment ça échoue?

Une suggestion (non testé votre regexp): Notez que * est un opérateur gourmand, donc .* est rarement une bonne idée car il peut correspondre à beaucoup plus que ce que vous vouliez.

Essayez:

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

il pense que je résolu en obtenant une idée d'une autre question stackoverflow

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

Cela semble fonctionner sur le site http://rubular.com/

+0

Ceci permet d'obtenir le même résultat que. *? - par exemple: 'alt =" (. *?) "' correspondra à tout le prochain ", mais' alt = "(. *)" 'correspondra à tout pour durer" – dbr

0

vous allez ici: http://rubular.com/regexes/8434

Vous étiez confronté à deux problèmes potentiels. Tout d'abord, sans ajouter l'option // m, '.' ne correspondra pas aux caractères de nouvelle ligne. Deuxièmement, vous utilisiez la correspondance gloutonne. Ajouter le '*?' le rend meilleur.

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