Re: [PHP] Regex to catch <p>s
[email protected] (Aschwin Wesselius)
| Newsgroups | php.general |
|---|---|
| Message-ID | <[email protected]> |
Aschwin Wesselius wrote:
> Ryan S wrote:
>> Hey all!
>>
>> To say I suck at regex is an understatement so really need any help I
>> can get on this, I have a page of text with different html tags in
>> them, but each "block" of text has a <p> or a < class="something">
>> tag... anybody have any regex that will catch each of these
>> paragraphs and put then into an array
>> example:
>> array[0]="<p> first block </p>";
>> array[1]="<p class="blah"> block X</p>";
>>
>> Thanks!
>> R
>>
> Hi,
>
> Maybe the example is overkill, but I give you a quick setup that can
> save you some time finding HTML tags with a certain attribute.
Hi,
I'm sorry. I didn't read your request properly. Below you'll have a
correct solution:
<?php
$html = <<<END_OF_HTML
<b>hello</b>
<b class="blah">hello</b>
<p>hello</p>
<p class="blah">hello</p>
<a>hello</a>
<a href="url">this</a>
<a>hello</a>
<a href="regex yo">hello</a>
<a>hello</a>
<a id="2" href="regex yo">hello</a>
<p>that</p>
<p class="blah" title="whatever">hello</p>
END_OF_HTML;
$tags = array();
$tags[] = 'p';
$tags[] = 'a';
$attr = array();
$attr[] = 'class';
$attr[] = 'href';
$vals = array();
$vals[] = 'blah';
$vals[] = 'url';
$vals[] = 'yo';
$text = array();
$text[] = 'hello';
$text[] = 'this';
$text[] = 'that';
$tags = implode('|', $tags);
$attr = implode('|', $attr);
$vals = implode('|', $vals);
$text = implode('|', $text);
$pattern =
'/<('.$tags.')[^>]*('.$attr.')[^>]*('.$vals.')[^>]*>('.$text.')[^<\/]*<\/\1>/i';
echo $pattern."\n";
echo "--------------------\n";
preg_match_all($pattern, $html, $matches);
var_dump($matches);
?>