Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[reg exp] Letters, met duplicaten, willekeurige volgorde

Pagina: 1
Acties:

Vraag


  • Rekcor
  • Registratie: februari 2005
  • Laatst online: 17-01 08:25
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


  • Rekcor
  • Registratie: februari 2005
  • Laatst online: 17-01 08:25
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.

  • Klaasvaak
  • Registratie: maart 2010
  • Laatst online: 22:06
Volgens mij gaat het zo mis met meerdere 'a'-tjes achter elkaar.

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

  • Rekcor
  • Registratie: februari 2005
  • Laatst online: 17-01 08:25
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...

Rekcor wijzigde deze reactie 10-01-2020 16:03 (39%)


  • Rekcor
  • Registratie: februari 2005
  • Laatst online: 17-01 08:25
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

  • Jurgle
  • Registratie: februari 2003
  • Laatst online: 24-01 11:44

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)

"Can I click it?"
My opinions may have changed but not the fact that I am right
eDesign.nl

Pagina: 1


Apple iPhone 11 Microsoft Xbox Series X LG OLED C9 Google Pixel 4 CES 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True