2009-09-17 12 views
24

J'ai frappé un mur. Est-ce que quelqu'un sait un bon éditeur de texte qui a la recherche et le remplacement comme Notepad ++ mais peut également faire une recherche regex multi-ligne et remplacer? En fait, je suis en train de trouver quelque chose qui peut correspondre à une regex comme:Multiline Regular Expression rechercher et remplacer!

recherche oldlog\(.*\n\s+([\r\n.]*)\);
remplacer newlog\(\1\)

Toutes les idées?

+0

Comment est-il possible que cette question ait autant de vues et si peu de votes? – axiopisty

Répondre

5

Ma recommandation personnelle est IDM Computing UltraEdit (www.ultraedit.com) - il peut faire des expressions régulières (à la fois rechercher et remplacer) avec Perl, Unix et Syntaxe UltraEdit La correspondance multi-ligne est l'une des fonctionnalités du mode regex de Perl.

Il a également d'autres capacités de recherche agréable (par exemple de recherche dans la gamme de colonnes de caractères spécifique, recherche dans plusieurs fichiers, historique de recherche, favoris de recherche, etc ...)

alt text http://www.ultraedit.com/assets/images/new_features/ue_1500/searchincolumn.png

+7

Un éditeur qui coûte 50 dollars ne remplace pratiquement pas Notepad ++. Oui, il y a beaucoup de choses comme la validation du client FTP ou CSS, mais qu'est-ce qui est bon si je n'en ai pas besoin? – Malcolm

+4

@Malcolm - Personnellement, ça valait le coup pour moi. Ça vaut le coup pour beaucoup de gens de voir comment le ou les gars qui le font sont encore en affaires :) En outre, l'OP n'a jamais demandé un "remplacement gratuit". Il a demandé quel éditeur peut remplacer qui a une certaine caractéristique. – DVK

+0

J'aurais dû dire, remplacement équivalent. Si vous avez 50 dollars de plus, bien sûr, ce serait un bon investissement, mais que faire si j'ai déjà tout ce dont j'ai besoin, à l'exception de la regex multiligne? Et personnellement, je ne suis pas un fan de "faire tout avec une application", surtout dans les programmes commerciaux, parce que vous payez pour tout et utilisez au moins la moitié de l'ensemble des fonctionnalités. Je vois que vous faites remarquer, cependant, c'est pourquoi je n'ai pas voté contre ou quelque chose. C'est juste mon opinion. – Malcolm

4

TextPad a de bonnes capacités de recherche et de remplacement Regex; Je l'ai utilisé pendant un moment et je suis assez content.

TextPad screenshot http://i31.tinypic.com/2bb22q.png

De l'Features:

recherche puissant/remplacer le moteur en utilisant des expressions régulières style UNIX, avec la puissance des macros éditeur. Ensembles de fichiers dans une arborescence de répertoires peuvent être recherché, et le texte peut être remplacé dans tous les documents ouverts à la fois.

Pour plus d'options que vous pourriez avoir besoin, consultez "Notepad++ Alternatives" à AlternativeTo.net.

+0

Avez-vous testé la recherche/le remplacement? – LeonardChallis

0

Vous pouvez utiliser Visual Studio. Télécharger Express gratuitement si vous n'avez pas de copie.

La regex de VS est non-standard, vous devrez donc utiliser \ n: b + [\ r \ n] à la place.

+1

Aimerais un peu plus d'aide ici. La documentation ne fait aucune mention de retour chariot (\ r) juste newline (http://msdn.microsoft.com/fr-fr/library/2k3te2cs(v=vs.80).aspx) J'essaie de trouver quelque chose qui se produit après une balise d'ouverture (pour les fichiers de ressources) et \ [. \ n] * foo ne trouve pas foo sauf s'il se trouve sur la même ligne. –

1

EditPlus ne fait un bon travail à rechercher/remplacer l'aide regex (y compris multiligne)

+0

Souciez-vous expliquer comment? Merci. – DrLightman

8

EditPad Pro a de meilleures capacités regex que tout autre éditeur que j'ai jamais utilisé.

En outre, je soupçonne que vous avez une erreur dans votre expression régulière - [\r\n.] correspondra seulement les retours chariot, les retours à la ligne, et les arrêts complets. Si vous essayez de faire correspondre un caractère (par exemple « opérateur point, plus CR et LF), essayez [\s\S] à la place.

+2

+1 pour EPP - personne ne le fait mieux. –

+0

@BenBlank Désolé de vous ramener à cela, a rencontré ce problème. Pourquoi '[\ r \ n.]' Ne correspond-il pas à l'opérateur de point plus CR et LF? –

+1

@Padenton - La plupart des opérateurs ne fonctionnent pas dans les classes de caractères. Par exemple, '[.() +? *]' Correspond exactement à ces caractères sans aucun comportement particulier. Jetez un oeil à "Metacharacters Inside Character Classes" [ici] (http://www.regular-expressions.info/charclass.html) pour plus d'informations. –

0

La dernière version de UltraEdit a multiligne trouver et remplacer w/support regex.

Ou si vous OK pour utiliser un outil d'expression rationnelle plus spécialisé, Regex Hero Il a l'avantage de pouvoir tout faire à la volée, c'est-à-dire que vous n'avez pas besoin de cliquer sur un bouton pour tester votre expression régulière car il est automatiquement testé après chaque pression de touche

Personnellement, j'utiliserais UltraEdit si je cherchais à remplacer le texte dans plusieurs fichiers.De cette façon, je peux simplement sélectionner les fichiers à remplacer en tant que lot et cliquez sur Remplacer. Mais si je travaille avec un seul fichier texte et que j'ai besoin d'écrire une expression régulière plus complexe, je la collerais dans Regex Hero et j'y travaillerais. C'est parce que Regex Hero peut gagner du temps quand vous voyez tout se passer en temps réel.

+0

En fait UltraEdit a trouvé/remplacé multi-lignes avec Regex depuis de nombreuses années. Je cours 8.0 (et je viens de découvrir que j'ai 7 versions en retard ... il est temps de faire une demande de petite caisse) et je fais des regex multilignes tout le temps. – jmucchiello

+0

La nouvelle fonctionnalité à laquelle je fais référence est celle des boîtes de texte multilignes dans la boîte de dialogue de recherche/remplacement UltraEdit. Je ne sais pas exactement quelle version a été introduite, mais je crois que c'est à peu près un an. Auparavant, ils avaient des boîtes de recherche et de remplacement à une seule ligne (la même que la plupart des autres éditeurs). –

4

L'éditeur Zeus peut faire multi-ligne rechercher et remplacer.

+3

+1 Cela fonctionne bien. – high5

5

J'utilise Eclipse, ce qui est gratuit et que vous pouvez avoir déjà si vous êtes un développeur. '\ R' agit comme un délimiteur de ligne indépendant de la plate-forme. Voici un exemple de recherche multi-ligne:

recherche:

\ bibitem. (\ R.)? \ R {([^ {] )} $ \ R^([^ \]. [^}] $ ​​\ R. $ \ R.)

et remplacer:

\ defcitealias {$ 2} {3} $

+1

impressionnant ne savait pas à propos de \ R où avez-vous trouvé cela?! – HaveAGuess

+0

La nécessité est la mère de l'invention! ;) – Vladtn

5

Je suis assez sûr que Notepad ++ peut faire maintenant via le plug-in TextFX (qui est inclus par défaut). Hit Control-R dans Notepad ++ et avoir un jeu.

+8

Je ne peux pas comprendre la recherche multi-ligne avec ça. – Moss

+0

Top textbox est ce que vous cherchez. Bottom textbox est ce que vous voulez le remplacer par. Cliquez sur "Trouver" puis "Remplacer le repos". – GuiSim

+0

'TextFX' n'est plus inclus dans les versions récentes de Notepad ++ ... –

0

ED for windows dispose de deux versions de regex, trois sortes de copier-coller (sélection, lignes ou blocs, ET vous pouvez passer de l'un à l'autre (contrairement à ultra edit, qui est au mieux) avec un clic de souris vous mettez en évidence - pas besoin de descendre un menu.La vitesse de faire le travail est incroyable, comme la lecture sur un Kindle, vous n'avez pas à y penser

2

J'utilise notepa d ++ tout le temps mais c'est Regex qui a toujours un peu manqué.

Sublime Text est ce que vous voulez.

9

Notepad ++ peut désormais gérer des expressions régulières multilignes (il suffit de mettre à jour la dernière version - la fonctionnalité a été introduite vers mars '12).

Je devais supprimer toutes les instructions onmouseout et onmouseover d'un document HTML et j'avais besoin de créer une correspondance multi-ligne non gourmande.

onmouseover=.?\s*".*?"

Assurez-vous de vérifier la:

[ ] . matches newline
case à cocher si vous souhaitez utiliser la capacité de match de plusieurs lignes.

0

Vous pouvez utiliser une version récente de Notepad ++ (Mine is 6.2.2).

Pas besoin d'utiliser l'option ". Match newline" comme suggéré dans une autre réponse. Au lieu de cela, utilisez l'expression régulière adéquate avec^pour "début de ligne" et $ pour "fin de ligne". Ensuite, utilisez \ r \ n après le $ pour une "nouvelle ligne" dans un fichier DOS (ou simplement \ n dans un fichier unix car le retour chariot est principalement utilisé pour le fichier texte DOS/Windows):

Ex.: Pour supprimer toutes les lignes commençant par les balises OBJE après une ligne commençant par un UID d'étiquette (à partir d'un fichier GEDCOM - utilisé dans la généalogie), je ne l'utilise la recherche regex suivant:

^UID (.*)$\r\n^(OBJE (.*)$\r\n)+ 

Et Substituer la valeur:

UID \1\r\n 

Ceci est des lignes correspondant à ceci:

UID 4FBB852FB485B2A64DE276675D57A1BA 
OBJE @[email protected] 
OBJE @[email protected] 
OBJE @[email protected] 
OBJE @[email protected] 

et la sortie du remplacement est

UID 4FBB852FB485B2A64DE276675D57A1BA 

550 instances ont été remplacées en moins de 1 seconde. Notepad ++ est vraiment efficace!

Sinon, pour valider une expression régulière, j'aime utiliser le testeur .Net RegEx (http://regexhero.net/tester/). C'est vraiment génial d'écrire et de tester à la volée une Reg Ex ...

PS .: Aussi, vous pouvez utiliser [\s\S] dans votre regex pour correspondre à n'importe quel caractère, y compris les nouvelles lignes. Donc, si vous cherchez un bloc de texte "multiligne" commençant par "xxx" et se terminant par "abc", le Regex suivant sera bien: ^xxx[\s\S]*?abc$"*?" doit correspondre le moins possible entre xxx et abc !! !

Questions connexes