web-dev-qa-db-fra.com

Multiline Regular Expression recherche et remplace!

J'ai heurté un mur. Est-ce que quelqu'un connaît un bon éditeur de texte qui a des fonctions de recherche et de remplacement similaires à celles de Notepad ++, mais qui peut également effectuer une recherche et un remplacement multi-lignes de regex? En gros, j'essaie de trouver quelque chose qui puisse correspondre à une regex comme:

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

Des idées?

27
Scott

Ma recommandation personnelle est UltraEdit ( www.ultraedit.com ) - de IDM Computing: il peut créer des expressions régulières (à la fois rechercher et remplacer) avec la syntaxe Perl, Unix et UltraEdit. La correspondance multiligne est l’une des fonctionnalités du mode regex Perl.

Il dispose également d'autres fonctionnalités de recherche de Nice (par exemple, recherche dans une plage 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

5
DVK

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

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

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

Assurez-vous de vérifier le: 

[] correspond à la nouvelle ligne
Si vous souhaitez utiliser la fonctionnalité de correspondance sur plusieurs lignes, cochez cette case.

10
Mark Salisbury

EditPad Pro a de meilleures capacités de regex que n’importe quel autre éditeur que j’ai utilisé.

De plus, je soupçonne que votre regex contient une erreur - [\r\n.] ne correspond qu'aux retours chariot, aux nouvelles lignes et aux points complets. Si vous essayez de faire correspondre un caractère quelconque (par exemple, "opérateur de point plus CR et LF), essayez plutôt [\s\S].

8
Ben Blank

Je suis presque sûr que Notepad ++ peut le faire maintenant via le plugin TextFX (qui est inclus par défaut). Appuyez sur Control-R dans Notepad ++ et jouez.

5
Michael

Le Zeus éditeur peut faire multiligne rechercher et remplacer.

5
jussij

J'utilise Eclipse , qui est gratuit et que vous avez peut-être déjà si vous êtes développeur. '\ R' agit en tant que séparateur de ligne indépendant de la plate-forme. Voici un exemple de recherche multiligne:

chercher:

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

et remplacer:

\ defcitealias {$ 2} {$ 3}

5
Vladtn

TextPad a de bonnes capacités de recherche et de remplacement de Regex; Je l'utilise depuis un moment et j'en suis assez content.

Capture d'écran de TextPad http://i31.tinypic.com/2bb22q.png

De la Caractéristiques :

Puissant moteur de recherche/remplacement utilisant Expressions régulières de style UNIX, avec le pouvoir des macros d'éditeur. Ensembles de Les fichiers dans une arborescence peuvent être recherché, et le texte peut être remplacé dans tous les documents ouverts à la fois.

Pour plus d’options dont vous pourriez avoir besoin, consultez " Notepad ++ Alternatives " sur AlternativeTo.net .

4
Donut

J'utilise Notepad ++ tout le temps mais c'est Regex qui a toujours fait défaut.

Sublime Text est ce que vous voulez.

2
opticyclic

vous pouvez utiliser le plug-in de script Python pour rechercher et remplacer des expressions régulières multilignes! - http://npppythonscript.sourceforge.net/docs/latest/scintilla.html?highlight=pymlreplace#Editor.pymlreplace

# This example replaces any <br/> that is followed by another on the next line (with optional spaces in between), with a single one
editor.pymlreplace(r"<br/>\s*\r\n\s*<br/>", "<br/>\r\n")
2
pra

EditPlus fait du bon travail en recherche/remplacement avec regex

1
Philippe Leybaert

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

La regex de VS n'est pas standard, vous devez donc utiliser\n: b + [\ r\n].

0
Shane Castle

ED for windows a deux versions de regex, trois sortes de copier/coller (sélection, lignes ou blocs, ET vous pouvez passer d’une version à l’autre (contrairement à ultra edit, qui est au mieux maladroit) avec un simple clic de souris pendant - nul besoin de tirer un menu. La vitesse d'exécution du travail est incroyable, comme lire sur un Kindle, vous n'avez pas à y penser. 

0
Marc Plimsoll

Vous pouvez utiliser une version récente de Notepad ++ (Mine est la version 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 appropriée avec ^ pour "début de ligne" et $ pour "fin de ligne". Puis utilisez\r\n après le $ pour une "nouvelle ligne" dans un fichier dos (ou juste\n dans un fichier unix car le retour à la ligne 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 une balise UID (à partir d'un fichier gedcom - utilisé dans la généalogie), j'ai utilisé les expressions rationnelles suivantes:

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

Et ce qui suit remplace la valeur:

UID \1\r\n

Ceci correspond aux lignes comme ceci:

UID 4FBB852FB485B2A64DE276675D57A1BA
OBJE @M4@
OBJE @M3@
OBJE @M2@
OBJE @M1@

et la sortie du remplacement est 

UID 4FBB852FB485B2A64DE276675D57A1BA

550 instances ont été remplacées en moins d'une seconde. Notepad ++ est vraiment efficace!

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

PS .: En outre, vous pouvez utiliser [\s\S] dans votre expression rationnelle pour faire correspondre tout caractère, y compris les nouvelles lignes. Donc, si vous recherchez un bloc de texte "multiligne" commençant par "xxx" et finissant par "abc", la regex suivante ira bien: ^xxx[\s\S]*?abc$"*?" doit correspondre le moins possible entre xxx et abc !! !

0
Valery Letroye

La dernière version de UltraEdit contient plusieurs lignes pour rechercher et remplacer le support de regex.

Ou si vous êtes prêt à utiliser un outil d'expression régulière plus spécialisé pour cela, il y a Regex Hero . Il a l'avantage de pouvoir tout faire à la volée. En d'autres termes, vous n'avez pas besoin de cliquer sur un bouton pour tester votre expression régulière, car elle est automatiquement testée après chaque pression sur une touche.

Personnellement, j'utiliserais UltraEdit si je cherche à remplacer du texte dans plusieurs fichiers. De cette façon, je peux simplement sélectionner les fichiers à remplacer en tant que lot et cliquer 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 le collerais dans Regex Hero et j'y travaillerais. En effet, Regex Hero peut vous faire gagner du temps lorsque tout se passe en temps réel.

0
Steve Wortham