[PHP]Regular Expression krijg het niet voor elkaar

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Yoram
  • Registratie: Augustus 2004
  • Laatst online: 05-08 14:22
Beste allemaal,

Ik ben bezig met een eenvoudig CMS systeem voor mezelf. En nu wil een soort van eigen commando's maken, die ik gewoon in me edit venster typ. Ik dacht dat doe ik wel even eenvoudig met explode() ofzo. Maar na dat getest te hebben liep ik tegen wat problemen aan. Na verder gezocht te hebben kwam ik op de preg_match() functie in php.

Nu kan je zo mooi een pattern invullen maar ik loop daar helemaal op vast. Ik ben nu al een hele dag bezig om het voor elkaar te krijgen. Ik leg het even uit:

Ik heb dit:
PHP:
1
$text = "<p style=\"text-align: left;\">!doorsturen=123!</p>";

Daaruit wil ik filteren: 'doorsturen' en het nummer wat daar achter staat. Dat nummer kan lopen van 1 tot 999.

Ik heb al onwijs veel sites gevonden waar ze het uitleggen, maar ik word er amper wijzer op. Het is zo ingewikkeld :S. Zelfs met de een gevonden cheat sheet kom ik er niet uit.

Ik heb dit geprobeerd, en daar allerlei variaties op.
(!doorsturen=)(\d\d\d)
(!doorsturen=)([0-9][0-9][0-9])
Werkt wel, maar als er een 2 cijferig getal staat komt er niks uit.

Gebruik ik ook wel de goede tekens om mijn commando te markeren? Dus de uitroeptekens in dit geval.

Ik weet dat het hier geen vraag baken is van wat voor regex heb ik nodig om dit of dat te filteren. Ik weet het echt niet meer. En met een voorbeeld kan ik het beter leren begrijpen. Ik hoop dat de mods een beetje coulant kunnen zijn door deze niet gelijk op slot te gooien.

Alvast onwijs bedankt!

Hallo!


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

http://www.regular-expressions.info/repeat.html <-- verplicht leesvoer (lees de hele site...).

Verder vind ik het persoonlijk niet zo'n mooie manier om dit soort dingen te doen. Niet alleen vanwege de regexp, ook vanwege de uitroeptekenstructuur en ook omdat je hier een stackbased parser voor zou moeten schrijven. :)

[ Voor 5% gewijzigd door RedRose op 01-02-2010 23:42 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 18-09 20:25

TeeDee

CQB 241

Nee, je gebruikt niet de goede modifier. Je zou eens kunnen kijken naar de * om het e.e.a te matchen.

@RedRose, als dit het enige is, zou ik persoonlijk geen stack based parser schrijven, maar goed, ik begrijp wat je wilt zeggen.
Een beetje een 'Get-r-done' mentaliteit... ;)

[ Voor 11% gewijzigd door TeeDee op 01-02-2010 23:50 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Yoram
  • Registratie: Augustus 2004
  • Laatst online: 05-08 14:22
@RedRose: Die site is wel veel zeg :| , me engels is niet fantastisch maar ik zal er doorheen kijken.
Dat stackbased parser zie ik eigenlijk wel zitten. Zoiets word dus ook gebruikt voor ubb code.

Ik ga ff verder op onderzoek uit.

Hallo!


Acties:
  • 0 Henk 'm!

  • DEiE
  • Registratie: November 2006
  • Laatst online: 18-09 15:15
TeeDee schreef op maandag 01 februari 2010 @ 23:46:
Nee, je gebruikt niet de goede modifier. Je zou eens kunnen kijken naar de * om het e.e.a te matchen.
Het probleem van de * is dat ie teveel matched in dit geval. De ts weet dat hij een getal moet hebben [0-9] dat kan lopen van 1 tot 999, oftewel [0-9] met 1 tot 3 herhalingen.
Als het stuk ervoor statisch is (het doorsturen=) kan hij daar ook prima op matchen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Yoram schreef op maandag 01 februari 2010 @ 23:53:
@RedRose: Die site is wel veel zeg :| , me engels is niet fantastisch maar ik zal er doorheen kijken.
Je bent ook niet bepaald met eenvoudig spul bezig. ;) Regular expressions hebben best nog wat haken en ogen en als je meer wil doen dan wat standaard spul, dan heb je nogal veel te lezen. Gelukkig as wat jij hier wil niet zo moeilijk. :)

Overigens is of je een stackbased parser nodig hebt enigzins afhankelijk van eventuele andere replaces die je zou willen doen. Voor bb-code is het inderdaad wel een gebruikelijke oplossing.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 18-09 20:25

TeeDee

CQB 241

DEiE schreef op dinsdag 02 februari 2010 @ 00:56:
[...]

Het probleem van de * is dat ie teveel matched in dit geval. De ts weet dat hij een getal moet hebben [0-9] dat kan lopen van 1 tot 999, oftewel [0-9] met 1 tot 3 herhalingen.
Als het stuk ervoor statisch is (het doorsturen=) kan hij daar ook prima op matchen.
Klopt, maar daar komt TS vanzelf achter. Even inlezen op de link van RedRose (sowieso) en het e.e.a. trekt zich vanzelf wel weer recht.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Yoram
  • Registratie: Augustus 2004
  • Laatst online: 05-08 14:22
Ik ben toch tot de conclusie gekomen dat het niet het eenvoudigste spul is. Daarom laat ik die Regular Expressions maar varen. Dus wat NMe zegt.

Ik heb het zo opgelost:
PHP:
1
2
3
4
5
6
7
$textIn = returnInfo($id, "text"); 
$string = '[doorsturen]';
$pos = strpos($textIn, $string);
if ($pos !== false) {
  $output = explode($string, $textIn);
  $id = $output[1];
}


Zo word je doorgestuurd als je "[doorsturen]PaginaID" intikt. Blame me niet op efficiëntie, het werkt :P
Iedereen bedankt voor jullie reacties !!! :)

Hallo!

Pagina: 1