2014-09-05 3 views
0

J'ai besoin de trouver et remplacer des milliers d'URLs cibles (ahrefs) dans des dizaines de documents html différents ... tous les ahrefs sont formatés différemment. J'ai besoin de remplacer toutes les différentes URLs cibles avec une URL cible uniforme.Regex trouver avec deux caractères génériques, remplacer l'un d'eux - TextMate

Il y a deux accrocs:

  1. Je ne veux pas bousiller les linkhrefs pour les références de fichier css, etc., mais plutôt que changer les ahrefs réels

2.in ces documents là-bas n'est pas une structure uniforme aux ahrefs. Certains ont class = stuff entre le a et le href. Voici quelques exemples:

<a class='image' href="examplelinkone.com"> 
<a class='image ' href="examplelinkone.com"> (space between e and ') 
<a class='someotherclass' href="examplelinktwo.com" 

Je peux avec succès trouver toutes les occurrences des ahrefs quand j'utilise regex comme ça ...

<a[^<>]+href="[^<>]+" 

... mais je ne peux pas comprendre comment REMPLACER seulement ce qui est entre les doubles guillemets de la partie href = et laissez seul tout ce qui peut être entre le a et le href

+0

C'est pourquoi vous ne faites pas correspondre HTML avec regex. Imaginez ceci: ' '. – h2ooooooo

Répondre

0

Vous devez utiliser des groupes de capture.

(<a[^<>]+href=")[^<>]+(") 

Dans la pièce de rechange, vous devez donner comme ça,

$1replacement-string$2 

$1 représente que nous sommes de retour faisant référence aux caractères qui sont présents dans l'indice du groupe 1 (<a[^<>]+href="). Vient ensuite la partie qui était dans les guillemets. Cette partie a été remplacée par la chaîne que vous avez donnée comme chaîne de remplacement. Enfin, le deuxième groupe capturé a été référencé pour obtenir le dernier symbole ".

+0

certains langages ou outils utilisent '\ 1' au lieu de' $ 1' –

0

Quelque chose de semblable à ce modèle devrait fonctionner pour éliminer quoi que ce soit entre les citations de href=:

\b(href=\W)[\w\s.]+(?=\W)\b 

Remplacer par:

$1 

- Testé TextMate:

<a class="image" href="examplelinkone.com">anything<a href="more"> 
<a class='image ' href='examplelinkone.com'> (space between e and ')"<something>"All ok"</a> 
<a class='someotherclass' href="examplelinktwo.com" 

Résultat:

<a class="image" href="">anything<a href=""> 
<a class='image ' href=''> (space between e and ')"<something>"All ok"</a> 
<a class='someotherclass' href="" 
Questions connexes