[reg exp] Letters, met duplicaten, willekeurige volgorde

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 28-06 17:29
Ik ben op zoek naar een reguliere expressie die het volgende vindt:
  • een '1'
  • gevolgd door een string waar tenminste 'a' en een 'b' in voorkomen (in willekeurige volgorde).
  • gevolgd door een '2'
  • gevolgd door een string waar tenminste 2x een 'c' en een 'd' in voorkomen (in willekeurige volgorde).
  • gevolgd door een '3'
  • gevolgd door een string waar alleen 'a' en een 'b' in voorkomen (in willekeurige volgorde).
Mogelijke goede subject-strings:

1acdb2dccaf3ab
1ba2aaacdc3ba
1abxde2cdcdcd3ba

Omdat mijn code tegen een api aanpraat, zijn mijn mogelijkheden om iets met de verwerking doen, beperkt: Ik kan een pattern en een een subject aanleveren en dat is het.

Ik kan er bijv. wel voor zorgen dat de letters tussen de nummers in de subject-strings op abc-volgorde staan:

1abcd2accdf3ab
1ab2aaaccd3ab
1abdex2cccddd3ab

Mijn eigen pogingen betroffen voornamelijk lookaheads. De gebruikte engine is van PHP.

^1(?=.*a)(?=.*b)[^2]*2(?=.*c)(?=.*d)[^3]3(?=.*a)(?=.*b)$

is mijn meest geavanceerde poging tot nu toe :o

Alle reacties


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 28-06 17:29
Zoals wel vaker, helpt het goed opschrijven van de vraag in de oplossing. Ik heb nu

^1ab[^2]*2.*[c]{2}d.*3ab$

En dat lijkt voor mijn voorbeelden te werken. Eis is dan inderdaad dat het antwoord gesorteerd is.

Acties:
  • 0 Henk 'm!

  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 23-06 20:16
Volgens mij gaat het zo mis met meerdere 'a'-tjes achter elkaar.

^1a+b[^2]*2.*[c]{2}d.*3a+b$

Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 28-06 17:29
Check, dank @Klaasvaak!

Er is inmiddels nog een eis bijgekomen: Tussen twee getallen (bijv. 1 en 2), komen 'a' en 'f' voor, en precies twee willekeurige letters.

Hier loop ik op het eerste gezicht in de soep vanwege de abc-volgorde: tussen a en f kunnen dan b, c, d, e komen, maar dit is niet het geval als ik 'a' en 'b' en precies twee willekeurige letters wil matchen...

[ Voor 39% gewijzigd door Rekcor op 10-01-2020 16:03 ]


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 28-06 17:29
Positive lookahead to the rescue:

1(?=[a-z]{3}2)a+.*f.*2

Hij checkt eerst of er 3 tekens [a-z] zijn tussen '1' en '2'
Vervolgens een a
Vervolgens 0 of meer tekens
Vervolgens een f

Als de eis is: 'a' en 'b' en één willekeurige letter, gaat het ook goed:

1(?=[a-z]{3}2)a+.*b.*2

Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Volgens mij is een mogelijke regex die je topicstart vervult: 1(?=.*b.*2)(?=.*a.*2)[a-z]+2(?=.*c.*c.*3)(?=.*d.*3)[a-z]+3(ab|ba)

En na de bijgekomen eis wordt het: 1(?=.*a.*2)(?=.*f.*2)[a-z]{4}2(?=.*a.*3)(?=.*f.*3)[a-z]{4}3(ab|ba)

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant

Pagina: 1