[regex] Niet tussen quotes matchen

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Ik probeer een regex te maken die matcht op de code {0}, maar hij moet er niet op matchen als het tussen enkele quotes voorkomt. Nu bedacht ik mezelf dat er dan gewoon een even aantal enkele quotes vóór de match moeten staan, of 0 enkele quotes. Ik dacht dat in eerste instantie zo op te lossen:
code:
1
(('(.+?)){2})*(\{0\})
Maar dan matcht ie dus gewoon. En ik wil natuurlijk dat de bovenstaande {0} helemaal niet matcht, omdat ie tussen enkele quotes staat :)

Ik heb ook nog geprobeert met een dakje voor de regex, zodat de telling van het even aantal enkele quotes vooraan de string moet beginnen. Maar dan matcht ie helemaal niet, ook als er {0} in staan die niet tussen quotjes staan...

日本!🎌


  • d00d
  • Registratie: September 2003
  • Laatst online: 16-09-2025

d00d

geen matches

ik kan natuurlijk te simpel denken, maar werkt dit niet?
[^']\{0\}[^']
maw, exclude een enkele quote voor en na {0}

[ Voor 8% gewijzigd door d00d op 13-04-2004 16:00 ]

42.7 percent of all statistics are made up on the spot.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Nee, dat is het niet. Ik had er misschien een voorbeeldje bij moeten zetten... Neem bijvoorbeeld dit:
code:
1
test{0}'aap{0}aap'{0}test

de 1e en de 3e {0} moet ie dus matchen, maar de 2e niet.

Met jouw oplossing zou je trouwens ook nog het probleem hebben dat {0} helemaal aan het begin of helemaal aan het eind van een string niet matchen ;)

[ Voor 3% gewijzigd door _Thanatos_ op 13-04-2004 16:03 ]

日本!🎌


  • Xlnt
  • Registratie: Oktober 2000
  • Laatst online: 03-05 18:18
_Thanatos_ schreef op 13 april 2004 @ 15:48:
Ik probeer een regex te maken die matcht op de code {0}, maar hij moet er niet op matchen als het tussen enkele quotes voorkomt. Nu bedacht ik mezelf dat er dan gewoon een even aantal enkele quotes vóór de match moeten staan, of 0 enkele quotes.
Het getal 0 is ook even ;).
Ik dacht dat in eerste instantie zo op te lossen:
code:
1
(('(.+?)){2})*(\{0\})
Maar dan matcht ie dus gewoon. En ik wil natuurlijk dat de bovenstaande {0} helemaal niet matcht, omdat ie tussen enkele quotes staat :)

Ik heb ook nog geprobeert met een dakje voor de regex, zodat de telling van het even aantal enkele quotes vooraan de string moet beginnen. Maar dan matcht ie helemaal niet, ook als er {0} in staan die niet tussen quotjes staan...
Je zult toch het dakje moeten gebruiken, omdat anders elke {0} wordt gematched, tussen quotes of niet. Namelijk vanwege de voorafgaande *.

Je gebruikt hier de volgende code.
code:
1
.+?

Maar je wilt hier eigenlijk alleen tekst zonder quotes matchen. Gebruik daarom de volgende code.
code:
1
[^']*

Aangezien je het dakje gebruikt, zul je er meteen voor moeten zorgen dat er nog andere tekst zonder quotes aan het begin van de regel mag staan, verkrijgbaar met precies dezelfde code.

Hoewel niet noodzakelijk is het netjes om ook de $ voor het einde van de regel te gebruiken. In dat geval wordt een volledige regex het volgende.
code:
1
^[^']*(('[^']*){2})*\{0\}.*$

Ik zeg hier 'een regex', omdat er natuurlijk nog veel meer mogelijk zijn.

"It's not that I'm lazy. It's that I just don't care."