用regex[PHP]去掉尾随字符串

用regex[PHP]去掉尾随字符串,php,regex,preg-match-all,Php,Regex,Preg Match All,我一直在试图找出我的regex有什么问题 有人能给我一些指导吗 请注意,它并不总是标记或标记这就是为什么我没有使用DOM() HTML: 结果 preg_match_all('/(((http|https|ftp|ftps)\:\/\/)|(www\.))[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\:[0-9]+)?(\/\S*)?(\W)/', $HTMLSourceCode, $results, PREG_PATTERN_ORDER); 预期结果: print_r($

我一直在试图找出我的
regex
有什么问题

有人能给我一些指导吗

请注意,它并不总是
标记或
标记这就是为什么我没有使用
DOM()

HTML:

结果

preg_match_all('/(((http|https|ftp|ftps)\:\/\/)|(www\.))[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\:[0-9]+)?(\/\S*)?(\W)/', $HTMLSourceCode, $results, PREG_PATTERN_ORDER);
预期结果:

print_r($results[0][0]);
// http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg">

下面是执行此任务的
DOM
示例:

http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg

不要使用正则表达式来解析HTML。改用
DOM
。@anubhava-你有这样的例子吗?-我使用正则表达式是因为它是一个字符串,所以认为它更容易被否决?用
[^“]*
替换
\s*
,删除
(\W)
。对于一次性脚本来说,regexp很好,对于持续时间更长的项目,请使用anubhava的解决方案。@TomRegner OMG谢谢!我一直在寻找这个解决方案。我永远无法掌握
regex
的诀窍,所以我必须分别处理每个标记,比如-
$nodeList=$xpath->query('//a/@href'))
$nodeList=$xpath->query('//img/@href');
a->href
是,但如果您想捕获
image->src
,则使用
$nodeList=$xpath->query('//img/@src);
http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg
$html = <<<EOF
<a href="http://domain.co.uk.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg">
<img class="alignnone size-medium wp-image-4181" src="http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-300x225.jpg" alt="dscn8900" width="300" height="225" srcset="http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-300x225.jpg 300w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-768x576.jpg 768w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-1024x768.jpg 1024w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-195x146.jpg 195w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-50x38.jpg 50w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-93x70.jpg 93w" sizes="(max-width: 300px) 100vw, 300px"></a>
EOF;

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$nodeList = $xpath->query('//a/@href');

echo $nodeList->item(0)->value . "\n";
http://domain.co.uk.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg