2010-10-12 7 views
-3

Est-il possible d'avoir une regex pour correspondre à une chaîne avec l'alternance 0 et 1? Il peut se terminer par 0 ou 1 et la longueur est arbitraire.Regex pour correspondre 010101

+9

Que voulez-vous dire, « comme ça »? – Pops

+2

Si vous avez seulement un nombre fini de mots possibles, il y a toujours une regex qui peut les faire correspondre. –

+9

downvoted car à 6200 rep vous devriez savoir comment écrire une telle question maintenant http://tinyurl.com/so-hints ... – jcolebrand

Répondre

7

Oui, c'est possible. (?:01)*0? autorisera une quantité arbitraire de "01", éventuellement suivie d'un 0, en supposant des expressions régulières de type PCRE avec des groupes non-capturants.

Notez que cela inclut la chaîne vide. Si vous voulez au moins un caractère (0), ou au moins un groupe de "01", qui peut également être traité avec 0(?:10)*1? et (?:01)+0?, respecitvely.

+0

Que signifie '?:'? – javaguy

+2

@javaguy: Normalement, dans une regex, vous pouvez créer un groupe de capture avec '()', et ensuite vous pouvez obtenir la partie qui a été trouvée par ce groupe après que le moteur de regex ait regardé votre chaîne. Cependant, parfois vous n'avez pas réellement besoin ou ne voulez pas le capturer. Pour ce faire, vous pouvez utiliser un groupe qui ne capture pas, ce que vous obtiendrez en plaçant '?:' Au début du groupe, comme dans ma réponse. –

+0

Si vous utilisez (01) * ce qui sera contenu dans le groupe? – javaguy

0

(010101)|(010100)

+2

Sauf que vous avez raté "la longueur est arbitraire" ...;) –

+0

Hmmm, quand j'ai répondu à la question, il n'a pas inclus «la longueur est arbitraire» ... –

11

A regex pour toutes les chaînes binaires possibles serait ^(0|1)*$. Cela inclut la chaîne vide. N'incluant pas la chaîne vide que vous utiliseriez ^(0|1)+$.

Est-ce ce que vous demandez?

Edit: Si c'est le cas que vous cherchez, vous pouvez faire alterner 0 et de 1, ainsi que:

^1?(01)*0?$ doit correspondre à toutes les combinaisons possibles. Si vous voulez que la chaîne commence toujours par 0, vous pouvez utiliser ^(01)*0?$ (y compris la chaîne vide) ou ^(01)+0?$ (à l'exclusion de la chaîne vide).

+0

Je crois qu'il cherche une chaîne constituée d'un motif alternant 0 et 1. –

+0

@Michael Madsen: Ah, je pense que vous pourriez avoir raison. Je ne savais pas exactement ce que l'OP voulait au début, mais j'ai modifié cela. Merci. – eldarerathis

+0

Je ne ferais pas confiance à la question jusqu'à ce qu'il l'édite pour être un peu plus question-like ... raisins aigres? Nahhhh .... juste à la recherche d'une question réellement utile est tout. – jcolebrand

0

Veuillez fournir plus d'informations. D'après les informations que nous avons les éléments suivants travaillerions:

[01]+ 
+0

Il dit qu'il veut alterner. Il n'y a pas d'alternance là-bas. –

+0

Oui, mais la question est un peu trompeuse :) – monokrome

2

Je suppose que vous voulez

((01)*(0)?) 

Mais la question est très ambiguë

Questions connexes