PHP在单行中全部出现[重复]

问题描述 投票:-1回答:1

此问题已经在这里有了答案:

这是对任何正则表达式结果的限制吗?我需要的是在一行中获得所有出现的内容,但是preg_match_all返回表达式的第一个和结尾。还有其他方法可以使所有事件都在线吗?

$re = "/(media|images)(.*)(.jpg|.jpeg|.png)/";
$str = 'images/test/test-1.png" alt="test-1" /></a><a href="/test-2" title="test 2"><img src="/images/test/test2.png" alt="test2" /></a>               <a href="/test-3" title="Cruises in Croatia"><img src="/images/EET/test-3.png';
preg_match_all($re,$str,$matches );
print_r($matches);

这就是我得到的。

Array
(
    [0] => Array
        (
            [0] => images/test/test-1.png" alt="test-1" /></a><a href="/test-2" title="test 2"><img src="/images/test/test2.png" alt="test2" /></a>               <a href="/test-3" title="Cruises in Croatia"><img src="/images/EET/test-3.png
        )

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

    [2] => Array
        (
            [0] => /test/test-1.png" alt="test-1" /></a><a href="/test-2" title="test 2"><img src="/images/test/test2.png" alt="test2" /></a>               <a href="/test-3" title="Cruises in Croatia"><img src="/images/EET/test-3
        )

    [3] => Array
        (
            [0] => .png
        )

)

php regex preg-match-all
1个回答
0
投票

您需要通过在量词?上添加(.*)来使正则表达式变得非贪婪。

正则表达式应如下所示:

(media|images)(.*?)(.jpg|.jpeg|.png)

示例代码:

$re = "/(media|images)(.*?)(.jpg|.jpeg|.png)/";
$str = 'images/test/test-1.png" alt="test-1" /></a><a href="/test-2" title="test 2"><img src="/images/test/test2.png" alt="test2" /></a>               <a href="/test-3" title="Cruises in Croatia"><img src="/images/EET/test-3.png';
preg_match_all($re,$str,$matches );
print_r($matches);

https://3v4l.org/8Haqm

© www.soinside.com 2019 - 2024. All rights reserved.