[php] regexp voor een divje die niet afgesloten is

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

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

code:
1
2
3
4
5
while ($row = mysql_fetch_array($result)) {
    $intro = $row["Intro"];
    if (preg_match_all('%<div[^>]*>(.+?)</div>%isU' ,$intro, $gevonden)) {
    print_r($gevonden[0]);
}


Kan ik testen of de variabele $intro divjes bevat die goed zijn afgesloten. Echter wil ik alleen die rijen hebben die niet goed zijn afgesloten. Heeft iemand een idee hoe ik dat kan doen?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Het aantal keren tellen dat je <div[^>]*> kan matchen vergelijken met het aantal voorkomens van </div>? :)

De daadwerkelijke inhoudelijke tekst krijgen is een stuk lastiger aangezien je niet zomaar met een regexp kan bepalen waar de tag hàd moeten eindigen. Dat kan weer makkelijker met een stackbased parser.

[ Voor 46% gewijzigd door NMe op 07-02-2006 16:11 ]

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

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hmm en hoe doe je zoiets?

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 06-06 09:54
Je gaat alle open en sluit tags af, en dan kijk je of de sluittag die je tegenkomt klopt met de laatste opentag die je gevonden hebt; en of je evenveel van beide hebt.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-06 20:52

Janoz

Moderator Devschuur®

!litemod

Nou, je neemt de voor jou niet geheel bekende term uit de post en gooit deze in google. En waarempel komen er verschillende hits die zelfs in het nederlands exact uitleggen wat een stackbased parser is en hoe je die zou moeten implementeren ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Is er ook ergens een script oid die test of alles netjes afgesloten is?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Dat kun je toch zelf doen op de manier zoals ik hierboven al zei?

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

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
code:
1
2
3
4
5
6
7
8
9
10
11
while ($row = mysql_fetch_array($result)) {
    $cid = $row["ID"];
    $pid = $row["pID"];
    $intro = $row["Intro"];
    if ($intro!="" && strstr($intro,"<div")) {
        $aantal = preg_match_all('%<div[^>]*>(.+?)</div>%isU' ,$intro, $gevonden);
        if ($aantal == 0) {
            echo "$aantal $cid $pid <br>";
        }
    }
}


sja heb nu dit... maar deze slaat de helft over heb ik het idee

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Ja, omdat je nu matcht op alles mèt een eindtag.

PHP:
1
2
3
4
5
6
7
8
$aantalOpen  = preg_match_all('%<div[^>]*>%isU' ,$intro, $gevonden);
$aantalSluit = preg_match_all('%</div>%isU' ,$intro, $gevonden);

if ($aantalOpen == $aantalSluit) {
  echo 'Netjes!';
} else {
  echo 'Sniegoe!';
}

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

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
code:
1
2
3
4
5
6
7
if ($intro!="" && strstr($intro,"div>")) {
        $aantaldivbegin = preg_match_all('%<div[^>]*>%isU' ,$intro, $gevondenbegin);
        $aantaldiveind = preg_match_all('%</div>%isU' ,$intro, $gevondeneind);
        if ($aantaldiveind <> $aantaldivbegin) {
            echo "$aantal $cid $pid <br>";
        }
    }


had zelf ook al zoietsbedacht idd...bedankt!

[ Voor 18% gewijzigd door RSD op 07-02-2006 20:30 ]

Pagina: 1