[php] regular expression match op ontbreken

Pagina: 1
Acties:

  • T.T.
  • Registratie: April 2000
  • Laatst online: 22-01 14:13

T.T.

Sowieso

Topicstarter
Ik wil een match doen waarbij een bepaalde string niet voor mag komen.

Zo moeten strings waarin "://" voorkomt niet geparsed worden. Ik kan alleen nergens vinden hoe ik dat voor elkaar krijg.

om bijvoorbeeld
code:
1
SRC="../lotr.gif"


te matchen wilde ik zoiets doen:
"'src=([\'\"\\s]?)(.*)(://){0}(.*)([\"\'\\s])'iU"
waar het dus fout gaat op (://){0}. Ook heb ik (?<!pattern) geprobeerd, maar daarmee lukte het me ook niet. [^ gaat alleen op voor een karakter, en ik zou niet weten hoe dat moet voor een string. Tenzij je soort classes zou kunnen maken met :://: ofzo, maar dat het ik niet gevonden.
Nu ben ik beginnende reg.exp'er, dus waarschijnlijk doe ik iets heel simpels mis :'(

samengevat: hoe match ik op ontbreken van een string?

  • tomato
  • Registratie: November 1999
  • Niet online
Dat kan niet. Je kunt wel eerst checken of een match op '://' faalt als dat zo is verder iets doen.

  • T.T.
  • Registratie: April 2000
  • Laatst online: 22-01 14:13

T.T.

Sowieso

Topicstarter
vandaar dat ik er niet uit kwam :(
Maar ok, bedankt voor je reactie. Nu weet ik in ieder geval hoe het wel moet :)

  • T.T.
  • Registratie: April 2000
  • Laatst online: 22-01 14:13

T.T.

Sowieso

Topicstarter
klein vraagje dan toch nog.

Op deze site kwam ik het volgende tegen (Extended Patterns):
(?<!pattern)
A zero-width negative look-behind assertion. For example /(?<!bar)foo/ matches any occurrence of "foo" that does not follow "bar". Works only for fixed-width look-behind.
Waar is die dan voor?

  • tomato
  • Registratie: November 1999
  • Niet online
Precies zoals ze uitleggen :)

Het volgende voorbeeld verduidelijkt het misschien:
code:
1
'hoimaihoi' =~ /(?<!mai)hoi/g

Ik hoop dat je niet schrikt van de perl syntax:

'hoimaihoi' is gewoon een string.
=~ wil zeggen dat er een regex losgelaten moet worden op die string
de regex zelf staat tussen / /g

Het voorbeeld matcht niet op de laatste hoi (daar staat immers 'mai' voor), maar match wel op de eerste hoi (daar staat immers geen 'mai' voor).


Je kunt dus niet iets als dit doen wanneer je 'ik' wil matchen behalve als er 'jij' voor staat:
code:
1
'hoi jij en ik' =~ /(?<!jij)ik/g

Hij zal natuurlijk gewoon matchen, omdat er geen 'jij' direct vooraf gaat aan de 'ik'. In jouw situatie heb je dan ook niets aan deze constructie.

  • T.T.
  • Registratie: April 2000
  • Laatst online: 22-01 14:13

T.T.

Sowieso

Topicstarter
Ah, dat is helemaal duidelijk, bedankt :)
Pagina: 1