Qu'est-ce qu'une expression régulière pour les chaînes de 0 et 1 avec un nombre pair de zéros et un nombre pair de ceux-ci? P>
J'ai quelque chose comme est-ce que ça a l'air bien? P> (1 * 01 * 01 *) * (0 * 10 * 10 *) * code>. P>
4 Réponses :
1100 est dans la langue, mais ne correspond pas à votre expression. 10101 n'est pas dans la langue, Mais votre expression correspond. P>
Je suggérerais de commencer par dessiner une DFA. Il y a une machine à 4 états assez évidente qui reconnaît cette langue. (Est-il possible de faire mieux?) La chaîne vide est dans la langue, l'état de départ est donc un état d'acceptation. Y a-t-il d'autres états acceptants? Pour un état non accepté, est Il y a un préfixe qui vous emmène du début-> s? Existe-t-il un moyen de boucler du dos à S sans frapper un état acceptant? Y a-t-il suffixe qui vous emmène du dos à un état accepté? p>
Un contre-exemple de votre expression régulière donnée est Comme mentionné par Jim Lewis ci-dessous, cela devrait en effet être un problème solvable. P> 01010101 code>. p>
Vous trouverez peut-être que l'écriture d'une expression régulière pour ce problème particulier em> ne sera pas possible (sauf si vous utilisez certains extensions non régulières em> à l'habitude. Langue d'expression régulière). Strike> P>
L'ensemble de toutes les chaînes sur {0,1} avec un nombre pair de 0 et un nombre pair de 1 est très certainement régulier. Une DFA avec quatre états devrait suffire.
@Jim Lewis: Merci, sur une considération supplémentaire, vous avez raison.
Je me suis souvent demandé pourquoi les gens frappent des choses qu'ils découvrent plus tard qu'ils sont en désaccord avec. J'ai tendance à simplement supprimer et reformuler la réponse. Il me semble que la barrette n'ajoute aucune valeur à la réponse finale et notre "éducation" peut être vue dans l'histoire si quelqu'un est intéressé quand même. Juste curieux depuis que j'ai vu pas mal de gens le faire.
@PAX: Si la modification est en réponse à un commentaire, ce faisant une frappe comme une frappe assez de contexte pour que le commentaire soit toujours logique.
@paxdiablo: Je pensais peut-être qu'une réponse éditée causerait le commentaire de Jim à ne plus avoir de sens, et je voulais fournir le contexte à cela. En outre, cela rappelle les futurs lecteurs que même ceux qui ont un représentant élevé qui existe depuis un moment n'est pas infaillible. :)
Eh bien, c'est probablement des devoirs, mais ce que diable: modifier: simplifié! p> p> p>
+1: beau travail. Pour que quiconque souhaite essayer cela de manière interactive, essayez gskinner.com/regexr
@Tloflin: Avez-vous utilisé JFLAP? J'ai fait et ça donna exactement la même réponse :)
@tiiftik, haha non, j'ai utilisé le Bloc-notes. Mais j'ai commencé avec un DFSM et j'ai réduit, donc je ne suis pas surpris.
@Ibrahim: Bien sûr, notez le * code> à la fin de l'expression. Il serait cassé en 1010 et 0110, qui correspondent tous les deux à l'expression entre parenthèses.
@tmp = $str =~ /0/g; print scalar @tmp % 2 == 0 ? 'even' : 'odd';
Ce n'est pas une expression régulière. Ceci est un programme.
Cela pourrait être simplement moi, mais cette question n'a pas de sens pour moi complètement. Peut-être reformuler?
hey écoutez mate / .... je me demande juste si ce que j'ai fait est juste ou non.. et si tu ne veux pas aider, alors pas .....
"Nice Guy": Pas besoin d'une réponse impolie à quelqu'un qui était b> essayant d'aider en soulignant que votre question n'était pas claire. (Et si c'est "gentil", je détesterais rencontrer "kevinmeanguy" ...)
Je soupçonne que ceci est une question de devoirs. Personne dans leur esprit de droite ne préférerait une regex odieuse sur une approche simple «comptez sur les personnages» qui est à la fois plus facile à comprendre et n'exécute pas le risque de performance de la backtracking.
@Dave: Je pense que @Kevin répondait à un autre commentaire, qui a ensuite été supprimé. Je détesterais voir que commencer un bowvote / ferme vote Storm ...