[php] preg_match vraagje

Pagina: 1
Acties:
  • 53 views sinds 30-01-2008

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ok,

ik wil kijken of $PATH_INFO een bepaalde vorm heeft.. nu wil ik dit graag met preg match doen. $PATH_INFO moet de volgende vorm hebben:

{alle getallen}_{alle tekens}_{alle tekens}.html

Nu ben ik aan het klungelen geweest, alleen lukt het meniet echt.. iemand een idee hoe dit te doen?

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

PHP heeft hier werkelijk goede guides over op hun website staan:

http://nl3.php.net/manual/en/pcre.pattern.syntax.php

Mocht het niet lukken post dan even wat je tot nu toe hebt en we kijken of we je verder op weg kunnen helpen :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
ik had iets van :

\$[0-9]\_[^\W_]\ _[^\W_] .[html]^\

maar geeft allemaal errors

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

code:
1
/^\d+_.+?_.+?\.html$/


^: begin van de string
\d+: 1 of meer cijfers
_: een underscore
.+?: een of meer karakters, ungreedy match
_: een underscore
.+?: een of meer karakters, ungreedy match
\.: een letterlijke punt (daarom de escape)
html: letterlijk html
$: einde van de string

[ Voor 82% gewijzigd door crisp op 20-12-2003 13:40 ]

Intentionally left blank


  • Jordi
  • Registratie: Januari 2000
  • Niet online

Jordi

#1#1

Ik kan je de oplossing wel voorkauwen, maar:
  • Een backslash als delimiter lijkt me niet echt een goed idee (hoe ga je dan escapen?). Gebruik eerder een / of een % teken ofzo.
  • Je matcht eerst op het eind van de string en dan, vervolgens na een (verplicht) aantal tekens, op het begin ervan. Dat matcht natuurlijk nooit.
  • [0-9] kan je ook als \d schrijven.
  • _ hoef je niet te escapen.
  • Het omgekeerde van \W ( [^\W] is om de dooie drommel niet 'alle tekens'. Voor 'alle tekens' gebruik je de punt ( . ). Als je alle tekens behalve _ wilt, kan je in je huidige opzet die hele \W gewoon weglaten, dan matcht ie op alles behalve _ tekens
  • Letterlijke punten dien je wel te escapen.
  • html kun je letterlijk laten staan. Nu matcht ie ook op thml, mhtl etc. etc. (tussen brackets geeft aan welke karakters mogen, niet in welke volgorde)
  • Je gebruikt geen quantifiers. even aangenomen dat je regex zou werken, zouden alleen dingen als 1_a_b.html matchen. Oftewel: doe iets met +, * of {bla,woei} (zie ook de handleiding over quantifiers).
Dus... veel leesplezier ;)

edit:
En ome Jotti mag sneller gaan tikken ;)

[ Voor 4% gewijzigd door Jordi op 20-12-2003 13:39 ]

Het zal wel niet, maar het zou maar wel.


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

RSD schreef op 20 december 2003 @ 13:27:
ik had iets van :

$[0-9]_[^W_] _[^W_] .[html]^

maar geeft allemaal errors
Wat voor errors krijg je allemaal :? In ieder geval krijg ik "Delimiter must not be alphanumeric or backslash" dus maken we er
code:
1
/$[0-9]/_[^W_] _[^W_] .[html]^/
van. Dan gaan we eens even kijken wat je hier nu neerzet:

$begin van de string
[0-9]1 getal
_1 underscore
[^W_]1 geen "non-word" character (dus wel een word character = w) of een underscore
_een spatie en daarna een underscore
[^W_]geen "non-word" character (dus wel een word character = w) of een underscore
.[html]^een spatie, een punt en dan een h, t, m of l met vervolgens het einde van de string

offtopic:
ik ben niet supergoed met regexps; commentaar is welkom ;)

Kijk ook hier eens voor de grap: http://gerard.yoursite.nl/got/regex-tut/reference.html

edit:
ik ben weer laat :Z... overigens fijn dat crisp even de zelfwerkzaamheid van de TS opheft :(

[ Voor 14% gewijzigd door Spider.007 op 20-12-2003 13:46 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
zoiets dan:

/^d+_[.^_]+_[.^_]+\.html$/

d+ alle cijfers

_ 1 underscore


[.^_]+ alle karakters zonder underscore

. een punt

html ene keer html

btw die . zitten daar ook karakters als ' " - + etc in ?

[ Voor 77% gewijzigd door RSD op 20-12-2003 13:59 ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

RSD schreef op 20 december 2003 @ 13:53:
zoiets dan:
[...]
btw die . zitten daar ook karakters als ' " - + etc in ?
quote uit de manual op PHP.net
. match any character except newline (by default)
:) had je zelf ook kunnen vinden ;)

[ Voor 4% gewijzigd door Spider.007 op 20-12-2003 14:00 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
$url = "1234_sdfsdf_dfsfdf.html";
if (preg_match("/^d+_[.^_]+_[.^_]+\.html$/",$url)) {
echo "true";
} else {
echo "false";
}

als ik dit doe, gefet hij constant false aan .. :?

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

in iedergeval moet ^d ^\d worden :)

nogmaals:
\d

any decimal digit

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

en [.^_] moet [^_] worden ;)
ik zou ook een i-modifier gebruiken als je ook op .HTML wilt matchen
sorry hoor, maar TS zat wel zo ver uit de richting dat ik het niet kon laten...

Intentionally left blank


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
ja ik zoek me rot, maar kan het niet echt vinden... ik wil dat in het gedeelte van alle tekens dat daar de _ niet in voor mag komen voor de rest alles ...

Maar zo werkt dat niet blijkbaar

en waarom die . weg dan ??? dat betekent toch alle karakters?

ik zal eens op imodifier zoeken :-)

[ Voor 23% gewijzigd door RSD op 20-12-2003 14:28 ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

RSD schreef op 20 december 2003 @ 14:27:
[...]en waarom die . weg dan ??? dat betekent toch alle karakters?[...]
niet 'a' is toch al alles behalve 'a' :) Wat je nu hebt neergezet:
Een beschrijving van een aantal characters in een bepaalde groep wordt een class genoemd

De verschillende karakters binnen de rechte haken mogen op die plek voorkomen.
Het subpatroon

x[abc123]y

matched:

x gevolgd door a òf b òf c òf 1 òf 2 òf 3, gevolgd door y

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

je moet juist bij een reversed class beginnen met een ^ tussen je blokhaken, anders krijgt je class een heel andere betekenis:
[a^b]: matched a of ^ of b
[^ab]: matched alles behalve een a of b

Intentionally left blank


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Dit is toch wel gewoon je reinste "ga eens een regexp tutorial opzoeken"-topic, hoor :o Als je na alle genoemde tips hier er nog niet uit komt, vraag ik me uberhaupt af of je wel leest wat men zegt en enig flauw benul hebt waar je mee bezig bent.

En begin eens gewoon met wat eenvoudige(re) sub-expressies voordat je meteen een compleet goede regex wilt hebben...

Lees ook de FAQ over regular expressions eens door.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1

Dit topic is gesloten.