Preg_match_all to get <div> tag contents from 2 divs

Ask about general coding issues or problems here.

Moderators: macek, egami, gesf

alinn
New php-forum User
New php-forum User
Posts: 1
Joined: Wed Dec 19, 2012 5:03 am

Preg_match_all to get <div> tag contents from 2 divs

Postby alinn » Wed Dec 19, 2012 5:07 am

I have this script but it only get the content from 1 div
What I need to modify?

Code: Select all

<?php // File: MatchAllDivMain.php

// Read html file to be processed into $data variable
$data = file_get_contents('test.html');

// Commented regex to extract contents from <div class="main">contents</div>
//  where "contents" may contain nested <div>s.
//  Regex uses PCRE's recursive (?1) sub expression syntax to recurs group 1
$pattern_long = '{                 # recursive regex to capture contents of "main" DIV
<div\s+class="main"\s*>                   # match the "main" class DIV opening tag
  (                                                                # capture "main" DIV contents into $1
        (?:                                                        # non-cap group for nesting * quantifier
          (?: (?!<div[^>]*>|</div>). )++  # possessively match all non-DIV tag chars
        |                                                                # or
          <div[^>]*>(?1)</div>                  # recursively match nested <div>xyz</div>
        )*                                                              # loop however deep as necessary
  )                                                                # end group 1 capture
</div>                                                     # match the "main" class DIV closing tag
}six';  // single-line (dot matches all), ignore case and free spacing modes ON

// short version of same regex
$pattern_short = '{<div\s+class="main"\s*>((?:(?:(?!<div[^>]*>|</div>).)++|<div[^>]*>(?1)</div>)*)</div>}si';

$matchcount = preg_match_all($pattern_long, $data, $matches);
// $matchcount = preg_match_all($pattern_short, $data, $matches);
echo("<pre>\n");
if ($matchcount > 0) {
        echo("$matchcount matches found.\n");
//  print_r($matches);
        for($i = 0; $i < $matchcount; $i++) {
                echo("\nMatch #" . ($i + 1) . ":\n");
                echo($matches[1][$i]); // print 1st capture group for match number i
        }
} else {
        echo('No matches');
}
echo("\n</pre>");
?>

johnj
php-forum Super User
php-forum Super User
Posts: 1805
Joined: Thu Mar 10, 2011 5:07 pm

Re: Preg_match_all to get <div> tag contents from 2 divs

Postby johnj » Wed Dec 26, 2012 3:53 am



Return to “PHP coding => General”

Who is online

Users browsing this forum: SAEEDPERSA and 3 guests

cron