Bonjour,
Java propose des méthodes pour pouvoir traiter des expressions régulières.
Mais je recherche un ou des exemples d'expressions qui ne sont pas des expressions régulières.
Avez-vous des idées ?
Merci d'avance.
Bonjour,
Java propose des méthodes pour pouvoir traiter des expressions régulières.
Mais je recherche un ou des exemples d'expressions qui ne sont pas des expressions régulières.
Avez-vous des idées ?
Merci d'avance.
Je crois que tu confond. Dans
l'expression régulière c'est b, pas a. Je vois donc pas dans ce contexte ce que tu appellerais un "expression non régulière", hormis un string b qui déclencherais une exception car n'étant pas correcte!
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (a.matches(b));
exemple de valeur incorrecte: b="((a)"; // nombre de parenthèses erroné
Bonjour,
je ne suis pas sûr de bien comprendre ta question.
Une expression peut être régulière si elle réponds à certains critères de syntaxe, mais elle peut aussi être utilisée comme expression "normale".
Après certaines expression ne peuvent pas être des expressions régulières, comme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part "crochet[non_fermé"
Non, non, je ne juge pas le code mais la possibilité d'évaluer sans ambiguïté une expression.
Par exemple, peut-on évaluer PI sachant que la grandeur de sa partie décimale vers plus l'infini ?
b="((a)" peut être en soit une expression régulière, en effet je peux très bien recherche la chaine suivante :
En fait dans ce cas cela dépend de l'alphabet et de la grammaire reconnue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 b="((a)"
Le débat est lancé.
A+
non, ((a) n'est pas un expression régulière. L'api javadoc est très claire sur ce qu'est une expression régulière. Et Pi n'a rien à voir avec çà . De plus il n'y a pas d'ambiguité sur la grammaire. Tu veux savoir quoi au juste????
Tu peux le faire, mais l'expression régulière associée est alors:
\(\(a\)
Salut,
Ce serait quoi une "expression non régulière" pour toi ?
Pour moi cela n'a pas trop se sens
a++
Réponse simpliste mais pourquoi faire compliqué quand on peut faire simple : http://fr.wikipedia.org/wiki/Langage_rationnel
A+
Tu ne nous apprend rien avec ce lien.
Ce qu'adiGuba voulais savoir (comme les auters ayant répondu ici), c'est :
Qu'est-ce que tu veux réellement savoir?
Si tu soutiens que ((a) est une expression régulière, alors tout est expression régulière...
Tu recherches des exemples d'ensembles qui ne peuvent pas être représentés par une expression régulière ? Pourquoi ne pas l'avoir dit plus tôt au lieu de parler d'expression non régulière...
Si tu veux des réponses claires il faut que la question le soit tout autant...
Après des contres exemples tu peux en avoir plein. Par exemple si les nombres de la table de 5 est facilement représentable ( "\d*[05]" ), ce n'est pas le cas de la table de 6 qui n'est pas représentable avec une expression régulière...
a++
adiguba: si c'est ça ce qu'il cherche, c'est ce que j'ai dit au début, il confond l'expression régulière et l'ensemble testé. Une expression régulière en java, c'est çà, point
http://java.sun.com/j2se/1.4.2/docs/...x/Pattern.html
NON, NON et NON, tu n'as vraiment pas compris la question initiale.
J'ai trouvé une réponse tout à fait satisfaisant sur le site du CNAM qui indique ceci dans un de ses cours :
L'URL du cours est http://deptinfo.cnam.fr/~barthe/NFP108/poly-automates.pdf
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Parmi les langages qui ne peuvent pas être d´écrits par automates finis, voici quelques exemples classiques : – les chaînes qui ont le même nombre de a que de b. – les chaînes bien parenthésées (avec une parenthèse fermante pour chaque ouvrante et une bonne imbrication des parenthèses).
Bon cours et à bientôt.
Effectivement, ce ne sont des pas des automates finis, mais cela n'en fait pas des expressions non-rationnelles.
Si tu veux en savoir davantage, je t'invite à lire la page Wikipédia à ce sujet: http://fr.wikipedia.org/wiki/Langage_formel et son équivalent anglais, bien plus complet.
apparement la question n'a rien a voir avec les expression régulière en java. Si tu cherche des exemples d'ensembles qui ne peuvent pas être défini par des regexp, je donnerais celle-ci, assez courrament mal compris dans ces forum:
une adresse email respectant le RFC 5322
Je ne connais aucune regexp à ce jour capable de valider correctement une addresse email suivant ce RFC
Il y a un cas typique de langage non régulier : les langages récursifs (auto-contenus).
Par exemple, il est impossible d'écrire une expression régulière qui serve de validateur HTML, la page entière étant considérée valide si l'expression arrive à retrouver la page entière. Il faut un automate à pile pour le faire, ce qui fait passer les langages récursifs dans la catégorie 2 de la classification de Chomsky.
Ceci s'explique assez facilement par le fait que l'on veuille retrouver exactement le même nombre de balises fermantes que de balises ouvrantes et que donc, pour cela, il faut les compter. Comme leur nombre est potentiellement infini, ce n'est pas possible avec un automate fini ordinaire.
On note toutefois que si on fixe un nombre maximum de balises imbriquées, alors il est possible d'énumérer tous les cas possibles, et donc de dresser un automate fini, ce qui rend le langage à nouveau régulier. Par contre, l'expression qui le décrit risque de faire plusieurs méga-octets et ça ne vaudra vraiment pas la peine. :-)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager