Toon posts:

[regexp] div#post matchen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer met regexp een div te matchen.
Tot nu toe heb ik dit:
code:
1
/<div id='post'>([^<>]*|(<div(\n|\r|.)*?<\/div>))*<\/div>/gi
  1. Dus eerst komt er <div id='post'>
  2. Daartussenin komt een stuk zonder < of > OF een <div die afgesloten wordt met een </div>
  3. Als laatste komt er </div> die dus als het goed is bij de <div id='post'> hoort.
Ik gebruik nu dit [^<>]* om geen div tags te matchen.
Maar dat filtert ook alle andere tags eruit, en dat is niet de bedoeling.

Hoe kan ik Niet <div matchen?
Of is er een betere manier om die <div id='post'> te krijgen?

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 15-02 17:57
code:
1
/<div id='post'>(.*)</div>/U

Met de U-flag maar je je expressie un-greedy, waardoor (.*) alles matched tot aan de eerste sluitende DIV-tag. Werkt dus niet meer als er nog een andere div-tag in je div#post genest is.

[ Voor 103% gewijzigd door frickY op 03-07-2006 11:52 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Afhankelijk van de omgeving waarin je werkt kun je ook gebruik maken van assertions: (?!<div)

[ Voor 6% gewijzigd door NMe op 03-07-2006 12:36 ]

'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.


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
(.*?) is ook ungreedy voor als je idd geen /U hebt

This message was sent on 100% recyclable electrons.


Verwijderd

Topicstarter
frickY schreef op maandag 03 juli 2006 @ 11:51:
code:
1
/<div id='post'>(.*)</div>/U

Met de U-flag maar je je expressie un-greedy, waardoor (.*) alles matched tot aan de eerste sluitende DIV-tag. Werkt dus niet meer als er nog een andere div-tag in je div#post genest is.
Dat probleem met geneste div's probeerde ik dus te verhelpen met dit stuk:
code:
1
([^<>]*|(<div(\n|\r|.)*?<\/div>))*?

Maar dat is ook het stuk dat niet werkt, omdat het alleen met de div werkt,
Denk trouwens ook dat het problemen oplevert met dubbel geneste div's


@-NMe-: geen idee wat assertions zijn :|

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:42

crisp

Devver

Pixelated

welke taal? PHP biedt ook mogelijkheden om met recursie in een reguliere expressie te werken hetgeen je hier zeker nodig hebt naast lookahead assertions.
Het beste is overigens om stackbased te werken, of nog beter: een DOM tree te bouwen en gewoon met DOM-methods te werken ;)

Intentionally left blank


Verwijderd

Topicstarter
Het is met javascript. ( voor php zat ik toch op het verkeerde subforum ;) )
Probeer een div te halen uit de responseText van een html pagina die ik met ajax ophaal.

Om een of andere rede stuurt Firefox geen responseXML mee...
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
var c = new XMLHttpRequest ();
c.onreadystatechange = function ()
{
    if (c.readyState == 4)
    {
        if (c.status == 200 || c.status == 304)
        {
            if(!c.responseXML) alert('Geen responseXML...')
        }
    }
}
c.open('GET', b, true);
c.send(null);


/me Zie dat ik beter mijn probleem op tafel kan gooien dan die vieze oplossing van mij.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:42

crisp

Devver

Pixelated

Dan stuur je waarschijnlijk ook geen valid XML op vanaf de server (niet well-formed, verkeerde headers, whatever), maar niet getreurd: clientside kan je ook parsen naar een DOM-tree, en dat kan ook met HTML.
Smerige workaround is om de responseText in een hidden DIV te gooien en dan vervolgens een getElementById('post') te doen ;)

Intentionally left blank


Verwijderd

Topicstarter
Ik verstuur de pagina nu als application/xhtml-xml en het werkt idd :D

Bedankt ( de rest ook natuurlijk ;) )
Pagina: 1