je le ferais comme ceci:
/[^ \\]*(?:\\ [^\\ ]*)*/
Cette est l'idiome de "boucle déroulée" de Friedl. Il y aura probablement très peu d'espaces échappés dans la chaîne cible par rapport aux autres personnages, donc vous engloutirez autant d'autres personnages que vous le pouvez à chaque fois que vous avez une chance. C'est beaucoup plus efficace qu'une alternance correspondant à un caractère à la fois. Editer: (Tomalak) Je place des barres obliques autour de la regex car la syntaxe surligneur semble les reconnaître et peint toute la regex en une seule couleur. Sans eux, il peut ramasser sur d'autres caractères, comme des guillemets, et incorrectement (et de façon confuse) peindre des parties de l'expression régulière dans différentes couleurs. (OP) L'OP ne mentionnait que les espaces, donc je ne permettais que de les citer, mais vous avez raison. L'exemple original de la boucle déroulée dans le livre concernait les chaînes entre guillemets, qui pouvaient contenir plusieurs séquences d'échappement, dont l'une est un guillemet échappé. Voici la regex:
/"[^\\"]*(?:\\.[^\\"]*)*"/
(Tomalak) Je ne sais pas ce que vous voulez dire quand vous dites qu'il ne correspond pas à « le nom du fichier au début de la chaîne. » Il semble correspondre aux deux noms de fichiers dans l'exemple de l'OP. Cependant, il correspond également à une chaîne vide, ce qui n'est pas bon. Cela peut être réparé, mais à moins de prouver que l'efficacité est un problème, cela n'en vaut pas la peine. La solution de Stefan fonctionne bien.
Cela ne devrait-il pas être "\\"? –
Ceci correspondra à une ligne vide ainsi qu'à un [TAB] b. – phihag
+1 pour la solution plus simple et compatible. Toutes les saveurs de regex ne sont pas look-behind. – Tomalak