1

Salut!

J'ai une chaine du genre : file.h "long file name.h" (cd config.tests/unix/stl && $(MAKE) distclean); $(DEL_FILE) .qmake.cache
et je voudrai obtenir :
file.h
long file name.h
(cd config.tests/unix/stl && $(MAKE) distclean);
$(DEL_FILE)
.qmake.cache


J'utilise ([^ \"]+)|\"(.*)\"|(\(.*\);?) mais ça ne marche pas, ça me lie (cd config.tests/unix/stl && $(MAKE) distclean); avec $(DEL_FILE).
Je précise aussi que (cd config.tests/unix/stl && $(MAKE) distclean); peut ne pas aveoir de ; à la fin (sinon j'aurai pu faire ([^ \"]+)|\"(.*)\"|(\(.*\); )

Qui a une idée?

2

oula, le problème c'est que si tu veux un truc un minimum générique, c'est pas avec des regexp que tu vas t'en sortir, la grammaire d'un shell est trop complexe :/

enfin je ne sais pas exactement dans quel but tu veux faire ça, mais dans ton exemple c'est normal que ça réagisse comme ça puisque le "\(.*\)" essaie de matcher la plus grande chaine possible, et comme il n'y a pas moyen de compter les parenthèses en regexp, tu ne pourras pas lui dire exactement à laquelle tu veux t'arrêter.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

oui, c'est pas possible de faire ça avec des regexp normales, par contre avec des regexp type perl c'est tout à fait faisable smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

4

• kim confirme.

Le problème c'est qu'il faut pouvoir compter les parenthèses, et une regexp normale ne sait pas faire ça.
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

5

Ouép, ce que tu cherches à faire ne correspond pas à une grammaire régulière. Il n'existe donc pas d'expression régulière la décrivant.
Les trucs de perl, c'est plus des expressions régulières, c'est un abus de langage qu'on utilise à cause de l'analogie de syntaxe, et du fait que ce soit un surensemble des expressions régulières ^^

6

Avec un automate Flex, il me semble que ce soit aussi possible (regexps+contextes).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité