7
votes

Expression régulière pour les cordes avec un nombre pair de zéros et ceux

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?

J'ai quelque chose comme (1 * 01 * 01 *) * (0 * 10 * 10 *) * .

est-ce que ça a l'air bien?


5 commentaires

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 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 ...


4 Réponses :


6
votes

1100 est dans la langue, mais ne correspond pas à votre expression. 10101 n'est pas dans la langue, Mais votre expression correspond.

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é?


0 commentaires

1
votes

Un contre-exemple de votre expression régulière donnée est 01010101 .

Vous trouverez peut-être que l'écriture d'une expression régulière pour ce problème particulier ne sera pas possible (sauf si vous utilisez certains extensions non régulières à l'habitude. Langue d'expression régulière).

Comme mentionné par Jim Lewis ci-dessous, cela devrait en effet être un problème solvable.


5 commentaires

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. :)



14
votes

Eh bien, c'est probablement des devoirs, mais ce que diable: xxx

modifier: simplifié!


4 commentaires

+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 * à la fin de l'expression. Il serait cassé en 1010 et 0110, qui correspondent tous les deux à l'expression entre parenthèses.



-1
votes
@tmp = $str =~ /0/g;

print scalar @tmp % 2 == 0 ? 'even' : 'odd';

1 commentaires

Ce n'est pas une expression régulière. Ceci est un programme.