Bonjour,
est-ce qu'on peut avoir des expressions régulières avec "shortest match" avec Str?
Sinon, quel moyen pourriez vous conseiller pour faire ca?
Merci.
Rosali
Bonjour,
est-ce qu'on peut avoir des expressions régulières avec "shortest match" avec Str?
Sinon, quel moyen pourriez vous conseiller pour faire ca?
Merci.
Rosali
Bonjour,
http://caml.inria.fr/pub/docs/manual...manual037.html
Tu dois pouvoir arriver à tes fins![]()
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
RosaliRosali > je ne sais pas trop ce que tu veux faire. J'ai déjà tripoté l'option "greedy" en PHP mais c'était toujours dans des cas douteux.
Tu as un exemple de ce que tu veux, où le comportement de Str n'est pas celui que tu attends ?
Ben, oui, je connais ca. Je voulais simplement savoir si qqn sais si "shortest match" est supporté. C'est pas indiqué dans le doc.
Tiré de http://courses.softlab.ntua.gr/compi...x-tutorial.pdf
Mais bon, c'est lancer un piano sur une moucheThough the "shortest match" principle is not used so frequently, ocamllex supports it. If you want to select the
shortest prefix of the input, use shortest keyword instead of the parse keyword. The "first match" principle
holds still with the "shortest match" principle.![]()
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
J'ai un string, qui en fait est composé des couples d'entiers :
(3,4)(6,7)(34,23)(233,2)
Je voudrais lire ca d'un fichier et mettre dans une liste : (int*int) list
Je voulais faire comme ca :
C'est la première fois que j'utilise des regexps avec caml, donc je ne suis pas sûre si cela s'utilise comme ca.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 let read s = let regex = Str.regexp "(\(.+\),\(.+\))" in let rec aux s a = try let j = Str.search_forward regex 0 s in let x = int_of_string (Str.matched_group 1 s) in let y = int_of_string (Str.matched_group 2 s) in let k = Str.group_end 2 in let sub = String.sub s k ((String.length s)-k) in aux sub a@[(x,y)] with Not_found -> a in aux s [] ;;
En tous cas, matched_group 1 va donner
3,4)(6,7)(34,23)(233
au lieu de
3
Bon, là, je me rends compte que je pourrais utiliser [0-9]+ au lieu de .+
Peut-être ...
Voilà, cela fait ce que je voulais.
Quand même, ca me donne des warnings :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 let read s = let regex = Str.regexp "(\([0-9]+\),\([0-9]+\))" in let rec aux s a = try let j = Str.search_forward regex s 0 in let x = int_of_string (Str.matched_group 1 s) in let y = int_of_string (Str.matched_group 2 s) in let k = Str.group_end 2 in let sub = String.sub s k ((String.length s)-k) in aux sub (a@[(x,y)]) with Not_found -> a in aux s [] ;;
Je comprends que j n'est pas utilisé. (Mais comment est-ce que je pourrais faire autrement?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Characters 44-46: let regex = Str.regexp "(\([0-9]+\),\([0-9]+\))" in ^^ Warning X: illegal backslash escape in string. Characters 52-54: let regex = Str.regexp "(\([0-9]+\),\([0-9]+\))" in ^^ Warning X: illegal backslash escape in string. Characters 55-57: let regex = Str.regexp "(\([0-9]+\),\([0-9]+\))" in ^^ Warning X: illegal backslash escape in string. Characters 63-65: let regex = Str.regexp "(\([0-9]+\),\([0-9]+\))" in ^^ Warning X: illegal backslash escape in string. Characters 109-110: let j = Str.search_forward regex s 0 in ^ Warning Y: unused variable j.
Et les autres warnings...?! C'est simplement la syntaxe de regexp... Je ne comprends pas.
Remplace let j par let _, ça devrait arranger le soucis pour j.
Essaye de doubler les antislash pour voir si ça arrange le warning (i.e remplace \ par \\).
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Partager