mikell,
Tout dépend de Jon à cette heure.
Valik a apporté énormément et on pouvait argumenter avec lui, du moins sur le plan technique. Et il était souvent drôle, si on passait outre son fort QI et son faible pH.
trancexx aurait pu assurer de plus grands bonds en avant mais son attitude cryptique était (est) trop souvent rédhibitoire.
Jon est capté par son job et j'ignore si sa motivation est intacte.
fredmame,
Les expressions régulières sont en fait un véritable langage à elles seules et à ce titre, elles sont forcément techniques. Avec l'introduction de la récursion, le langage regexp (type PCRE, donc Perl, Ruby, Java et consort) est devenu Turing-complet ; il permet donc théoriquement de réaliser n'importe quel algorithme de cette classe. Evidemment, personne n'imagine en pratique de coder un véritable algorithme ainsi mais il en reste que c'est possible, même au prix de contorsions délirantes.
Comme tous les langages, il a une syntaxe et une grammaire (voir fichier d'aide) et il résulte de chaque "pattern" regexp une sémantique extrêmement précise et potentiellement puissante. Une regexp peut sembler totalement absconse à un néophyte, mais pas plus qu'une requête SQL complexe, qu'un programme APL (ex
construire un Sudoku solver), Forth, C# ou un cartouche égyptien en hiéroglyphes à un juriste constitutionnel. La maîtrise des constructions de base regexp demande donc un effort certain mais paye vite l'investissement consenti.
Par exemple, il n'est pas trivial au premier regard que la regex dans le code qui suit permette de déterminer si un nombre est premier. NOTE : Cette regexp peut éventuellement renvoyer un résultat faux sur de grands nombres à cause de limitations de taille de pile interne à l'implémentation de PCRE1, mais l'idée reste valable.
Code : Tout sélectionner
; 15485863 is the million-th prime
Local $a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 31, 101, 456378, 1641537, 1549641, 157 * 43 * 273, 2222222, 12509781, 13998689, 15485863]
Local $r
For $v In $a
$r = _IsPrime($v)
ConsoleWrite($v & " est " & ($r ? "premier" : "composite") & @LF)
Next
Func _IsPrime($n) ; n integer >= 0
Return Not StringRegExp(_StringRepeat('-', $n), '^.?$|^(..+?)\1+$')
EndFunc
Certes cet exemple est un peu exceptionnel mais il illustre la grande compacité possible.