ID:               25618
 Updated by:       [EMAIL PROTECTED]
 Reported By:      yurtesen at ispro dot net dot tr
-Status:           Open
+Status:           Bogus
 Bug Type:         PCRE related
 Operating System: FreeBSD 4.8-STABLE
 PHP Version:      4.3.3
 New Comment:

You just need to make your * non-greedy there.
eg.
"/<a.*href=\"(.*)\".*>(?:<.*>)*?(.*)<\/a>/iU"


Previous Comments:
------------------------------------------------------------------------

[2003-09-21 07:46:02] yurtesen at ispro dot net dot tr

Description:
------------
If I have string
<a HREF="linkhere"><font>texthere</a></font>
I can extract the text 'linkhere' and 'texthere' with
preg_match_all("/<a.*href=\"(.*)\".*><.*>(.*)<\/a>/iU", $line,
$matches);

But if the string is
<a HREF="linkhere"><font><b>texthere</a></b></font>
preg_match_all("/<a.*href=\"(.*)\".*>(?:<.*>)*(.*)<\/a>/iU", $line,
$matches);

doesnt work. It matches for "<font><b>texthere"
I am trying to exclude <font><b> by matching repeatedly by
(?:<.*>)* before the actual text I need.

You can check out my php configuration from
http://www.ispro.net/temp/phpinfo.php

Reproduce code:
---------------
<?
  $line = '<a HREF="linkhere"><font><b>texthere</a></b></font>';

  preg_match_all("/<a.*href=\"(.*)\".*>(?:<.*>)*(.*)<\/a>/iU", $line,
$matches);

  print_r($matches);

?>

Expected result:
----------------
Array
(
    [0] => Array
        (
            [0] => <a HREF="linkhere"><font><b>texthere</a>
        )

    [1] => Array
        (
            [0] => linkhere
        )

    [2] => Array
        (
            [0] => texthere
        )

)

Actual result:
--------------
Array
(
    [0] => Array
        (
            [0] => <a HREF="linkhere"><font><b>texthere</a>
        )

    [1] => Array
        (
            [0] => linkhere
        )

    [2] => Array
        (
            [0] => <font><b>texthere
        )

)


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=25618&edit=1

Reply via email to