2010-08-25 5 views
0

Je travaille actuellement sur un tube sur Yahoo! Pipes J'ai un RegExp pour faire correspondre une URL. Maintenant, je dois faire correspondre le non corrigé afin de le supprimer, de sorte qu'il n'y a que mon URL. Mon RegExp est:Inverser correspond à RegExp

[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+ 

Comment inverser la correspondance? (Cela doit être fait via un autre RegExp, YPipes ne supporte pas d'autre moyen.)

edit: Pour la clarification: J'ai une chaîne et j'ai besoin d'obtenir la première URL dedans. C'est pourquoi rien d'autre ne fonctionne ...

+0

Le truc "non" ne fonctionne-t-il pas? C'est à dire. comme ceci: [^ (votre-regexp-ici)] – RWS

+2

Non, vous pouvez inverser les classes de caractères de cette façon, mais pas les expressions rationnelles entières. –

+0

D'accord, merci, ma faute entièrement. Pardon. – RWS

Répondre

0

Yahoo Pipes supporte le remplacement de regex (utilisez un module String Regex).

Ensuite, faites correspondre la partie que vous voulez garder et capturer dans un groupe. Vous faites déjà, bien que votre regex lui-même est un peu mal, voici celui qui a au moins les erreurs évidentes corrigées:

 
([A-Za-z]+://[A-Za-z0-9_-]+\.[A-Za-z0-9_:%&?/.=-]+) 
^  ^  ^
|   |   | 
|   |   + lone dashes always at the end of the character class! 
|   +--- forward slashes do not need to be escaped    
+--- capturing group 1, contents later accessible through $1 

puis remplacer la chaîne entière avec le contenu de ce groupe. Il suffit de mettre $1 dans le champ "remplacer par". Effectivement, cela supprime tout ce que vous ne vouliez pas garder.

Puisque je ne suis pas sûr de ce que votre regex devrait réellement faire, je ne peux pas vous donner une meilleure version.

Comme une indication générale: Regex est toujours et seulement assortit choses, et jamais sur les ne correspond pas à (à savoir « exclusion ») des choses. Il y a des expressions rationnelles qui ont un effet d'exclusion, mais même elles l'atteignent grâce à l'appariement.

+0

S'il vous plaît lire la modification. Je pense, une autre possibilité serait d'avoir l'autre contenu capturé plus tard pour soutenir $ 1 à nouveau. Avez-vous une idée? – fb55

+0

@ FB55: Utilisez [\ s \ S] *? 'Avant et' [\ s \ S] * 'après l'expression rationnelle:' [\ s \ S] *? ([A-Za-z] +:// [A-Za-z0-9 _-] + \. [A-Za-z0-9 _:% &? /.=-] +) [\ s \ S] * ' – Tomalak