2016-04-05 15 views
1

Ich bin ziemlich neu in der Verwendung von regulären Ausdrücken und ich habe festgestellt, wie man einen regulären Ausdruck, der binäre Zeichenfolgen, die genau zwei 1 und eine ungerade Anzahl von Nullen enthalten akzeptiert. Ich habe eine Idee von den ungeraden Nullen Teil 1 * 01 * (01 * 01 *) *, aber ich bin mir nicht sicher, wie man es in die genau zwei 1 Teile einbaut.Regulärer Ausdruck Genau Zwei 1

+0

Wie lange kann diese Zeichenfolge sein? Dies könnte besser als Nachschlagetabelle implementiert werden. Es gibt nur 56 solche binären Zeichenfolgen in einem 16-Bit-Raum. –

Antwort

0

Wahrscheinlich gibt es eine viel effizientere Art und Weise, aber eine Möglichkeit wäre:

  • Verwendung (00)* schließen jede gerade Zahl von Nullen
  • fügen Sie die zwei Einsen von Hand ->(00)*1(00)*1(00)*
  • und dann gehen Sie durch die vier Fälle von zusätzlichen Nullen mit ODER, so dass die Gesamtzahl ungerade ist: eine weitere 0 vorne, in der Mitte oder auf der Rückseite oder eine an all diesen Stellen

So könnte die endgültige Regex wie folgt aussehen:

(0(00)*1(00)*1(00)*)|((00)*1(00)*01(00)*)|((00)*1(00)*1(00)*0)|((00)0*1(00)0*1(00)*0) 
+0

Danke! Ja, ich habe darüber nachgedacht, die gerade Anzahl von Nullen zu verwenden und eine zusätzliche Null hinzuzufügen, um es merkwürdig zu machen, aber es schien nirgendwo hinzuführen, aber es in drei Fällen erledigt zu haben hat definitiv die Aufgabe erfüllt. –