Salut,
en fait pour le regexp, il faudrait une expression un peu élaborée pour capturer les tranches contenant la valeur recherchée.
Exemple :
(.*)?(27|(([^0-9][0-9])|([0-1][0-9])|([2][0-6]))\-(([2][8-9])|([3-9][0-9])|([0-9]+[0-9][0-9])))(.*)?
Avec ça, je trouve 27 dans la seconde série, mais pas dans la première, ton exemple fonctionne. Restera donc à l'adapter pour une construction dynamique.
Pour expliquer un peu l'expression ci-dessus, elle est en trois parties principales:
-1- n'importe quoi ou rien au début;
-2- la chaine recherchée;
-3- n'importe quoi ou rien à la fin.
Pour la seconde partie, je joue sur des alternatives :
-1- le nombre exact recherché;
-2- un nombre inférieur suivi d'un tiret et terminé par un nombre supérieur.
Pour construire un nombre inférieur, si je prends par exemple 27, j'ai au choix:
-1- un chiffre de 0 à 9 (non précédé d'un autre chiffre, important)
ou un premier chiffre de 0 à 1 suivi d'un chiffre de 0 à 9 (maxi => 19)
ou un premier chiffre égal à 2 suivi d'un chiffre de 0 à 6 (maxi => 26)
-2- un tiret;
-3- un chiffre de 2 suivi d'un chiffre de 8 à 9 (mini => 28, maxi => 29)
ou un chiffre de 3 à 9 suivi d'un chiffre de 0 à 9 (de 30 à 99)
ou un nombre indéterminé de chiffres de 0 à 9 suivi d'un chiffre de 0 à 9 suivi encore d'un chiffre de 0 à 9 (donc > 100)
Si tu prends mon exemple d'expression et que tu la mets sur plusieurs lignes avec une indentation, ce sera peut-être beaucoup plus facile à suivre ;)
Pour une construction dynamique, il faudra dans ce cas décomposer le nombre recherché en unité/dizaine/centaine?/etc? et construire les blocs d'alternative : pas nécessairement simple, mais faisable ;)
______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)