2009-09-25 6 views
0

Nous avons eu un problème avec l'éditeur de texte sur notre site Web qui doublait l'URL. Ainsi, par exemple, le champ de texte pourra même paraître contenir:Regex pour trouver les mauvaises URL dans un champ de base de données

This is a description for a media item, and here in <a href="http://www.example.com/apage.htmlhttp://www.example.com/apage.html">a link</a>. 

donc à peu près je besoin d'un regex pour détecter toute chaîne qui commence par http et a une autre http avant une citation de fermeture, comme dans « http://www.example.com/apage.htmlhttp://www.example.com/apage.html »

+0

Vous voulez seulement un match ou vous voulez une capture de l'un d'entre eux? –

Répondre

3
"http[^"]+http 
0

Si vous pouvez utiliser le *.? syntaxe, vous pouvez simplement rechercher ce qui suit:

http(.*?)http 

et si c'est présent, rejeter l'URL.

0

La chaîne qui commence par http et a une autre http avant une citation est:

^http[^"]*http 

Mais, bien que cela répond exactement à votre question, je pense que vous voudrez peut-être la réponse de Uh Clem à la place ;-)

0

vous voudrez probablement quelque chose comme ceci:

("http[^"]+)(http) 

puis comparer les deux et si \ 1 === "+ \ 2 alors les remplacer

.

Une pensée; Avez-vous des chaînes de requête dans l'une de vos URL? Si vous le faites, est-ce que l'un d'entre eux est comme ceci "http://someurl.com?http=somemoredatahttp://someurl.com?http=somemoredata"?

Si oui, vous voudrez quelque chose de bien plus compliqué.

1
http://www.example.com/apage.htmlhttp://www.example.com/apage.html 

Ceci est en fait une URL valide! Donc, vous voudriez être un peu prudent de ne pas utiliser d'autres URLs qui se trouvent avec 'http: //' au milieu d'eux. Pour détecter seulement une URL « doublé », vous pouvez utiliser des références arrières:

"(https?://[^"]*)\1" 

(Ceci est une caractéristique regex non standard, mais la plupart des implémentations modernes ont.)

utilisant l'expression rationnelle pour traiter HTML est une mauvaise idée. HTML ne peut pas être analysé de manière fiable par regex.

Questions connexes