Regex字符串以<;br>;


Regex - string ends with <br>

我有一个由url组成的字符串,由<br>标记分隔。我使用这个正则表达式来匹配URL:/(http|https|ftp|ftps)':'/'/[a-zA-Z0-9'-'.]+'.[a-zA-Z]{2,3}('/'S*)?/g

上面的匹配了整个字符串,这不是我想要的。我需要没有
标签的url。

我已经尝试添加用(<br>'/'S)替换('/'S*),但它返回错误的结果。

正确的解决方案是什么?

示例url列表:

http://www.google.com/explearning/4a1f519153c809a424ee2d3ed93b685a<br>http://www.google.com/explearning/e3fa4315175288ea85b7682c34d9f504<br>http://www.google.com/explearning/e818d4fd6d546844d63fb9e160cf046e<br>http://www.google.com/explearning/5d4c6b570e6bfa918b7b4be14cc41a42<br>http://www.google.com/explearning/adf3d853c1bb4f5f30efc64802c30d75<br>

从字符串中提取URL的最佳方法是使用爆炸,然后,如果您想测试每个部分是否是有效的URL,可以使用FILTER_VALIDATE_URL,例如:

$parts = explode('<br>', $yourstring);
$urls = array();
foreach($parts as $part) {
    if(filter_var($part, FILTER_VALIDATE_URL))
        $urls[] = $part;
}

如果您想检查您的字符串是否仅由用<br>标记分隔的URL组成,您只需要比较$parts长度和$urls长度。如果这两个长度相等,那么字符串就是您想要的。但是你可以让foreach循环更有表现力。当零件不是url时,可以停止foreach循环:

$parts = explode('<br>', $yourstring);
$urls = array();
foreach($parts as $part) {
    if(filter_var($part, FILTER_VALIDATE_URL))
        $urls[] = $part;
    else break;
}
if (count($parts) == count($urls))
    print_r($urls);