[php] simpele reguliere expressie.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil in een hele lange string alle strings eruit halen die met "bestand" beginnen en doorlopen tot de eerstvolgende punt ".". Dus "bestand...... ."


IK heb dit geschreven:
PHP:
1
2
3
4
5
6
7
8
    $x = preg_match_all("/\bestand [\.]/", $html_data, $resultaten);    
    for ($i = 0; $i < count($resultaten); $i++)
    {
        for ($j = 0; $j < count($resultaten[$i]); $j++)
        {
            echo "-".$resultaten[$i][$j]."-";
        }
    }


Maar erg gaat ergens iets fout. Ik wil die resultaten dus echoen. Ik krijg nu niks op mijn scherm, terwijl ik zeker weet dat het erin zit. Zie ik iets over het hoofd?

Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
PHP:
1
$x = preg_match_all("/\bestand[.*?]\./", $html_data, $resultaten);


Zoiets?

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Jouw regex ziet er een beetje raar uit naar mijn idee... (beginnen met /\ bijv :?)Volgens mij moet je deze regex gebruiken:
code:
1
"bestand(.+?)\."

Ik weet niet of bovenstaande een geldige PHP-string is, ivm met die backslash, maar dit zou em moeten wezen. Ook moet de regex-engine van PHP non-greediness ondersteunen (voor het .+? gedeelte).

日本!🎌


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Je moet je reguliere expressie een beetje aanpassen want die klopt nu niet. Volgens mij is het eerste teken al gelijk niet goed. En als er na bestand geen spatie en punt staan vind hij ze ook niet.

Moet meer iets zijn van:
PHP:
1
preg_match_all('bestand(.*)[\.]', $data, $result);

klopt niet helemaal denk ik maar moet wel zoiets zijn

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Afgezien van die eerste \ is de [\.] ook een beetje een rare :)

Je escaped nu feitelijk 2x het metacharacter '.', door er een slash voor te zetten (ok), maar dan nog twee brackets er omheen (:?) ;)

Je zegt nu met [\.] niet veel anders dan 'Op deze plek moet een backslash of een punt staan'.

Kortom, jouw regex matcht op de (sub)string
'\bestand \'
of
'\bestand .'
Heb het gevoel dat je hier de slash verwart met een ^

Mijn voorstel is de volgende:
code:
1
/bestand([^.]*)/

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die laatste werkt perfect. THANKS! :D
Pagina: 1