Php 图像和链接URL的正则表达式

Php 图像和链接URL的正则表达式,php,regex,preg-replace,Php,Regex,Preg Replace,编辑:我没有像其他50亿个问题那样解析html。这是原始的未格式化文本,我想转换成一些HTML 我正在进行后期处理。我需要将带有图像结尾jpe?g | png | gif的URL转换为图像标记,并将所有其他URL转换为href链接。我有我的图像替换正确,但我坚持保持链接替换试图覆盖彼此 我需要关于表达式的帮助,如何让它在不使用图像替换中的标记的情况下查找URL,或者查找不以点jpe?g | png | gif结尾的URL public function smartConvertPost($pos

编辑:我没有像其他50亿个问题那样解析html。这是原始的未格式化文本,我想转换成一些HTML

我正在进行后期处理。我需要将带有图像结尾jpe?g | png | gif的URL转换为图像标记,并将所有其他URL转换为href链接。我有我的图像替换正确,但我坚持保持链接替换试图覆盖彼此

我需要关于表达式的帮助,如何让它在不使用图像替换中的标记的情况下查找URL,或者查找不以点jpe?g | png | gif结尾的URL

public function smartConvertPost($post) {

    /**
     * Match image based urls
     */
    $pattern = '!http://([a-z0-9\-\.\/\_]+\.(?:jpe?g|png|gif))!Ui';
    $replace='<p><img src="http://$1"></p>';
    $postImages = preg_replace($pattern,$replace,$post);

    /**
     * Match url based
     */
    $pattern='/http://([a-z0-9\-\.\/\_]+(?:\S|$))/i';
    $replace='<a href="$1">$1</a>';
    $postUrl = preg_replace($pattern,$replace, $postImages);

return $postUrl;
}

谢谢,

因为这是关于这类主题的第215247篇文章,让我们再说一遍:HTML太复杂了,无法使用正则表达式。使用解析器。 看这个

PS:无意冒犯=

编辑:

我个人经常使用symfony,有一个非常好的解析器可以满足您的需要:


您可以在html上使用简单的css表达式获取所有图像。试试看。

既然这是关于这类主题的第215247篇文章,让我们再说一遍:HTML太复杂,无法使用正则表达式。使用解析器。 看这个

PS:无意冒犯=

编辑:

我个人经常使用symfony,有一个非常好的解析器可以满足您的需要:


您可以在html上使用简单的css表达式获取所有图像。试试看。

用记号笔怎么样


public function smartConvertPost($post) {
    $MY_MARKER="<MYMARKER>"; // Define the marker here

    /**
     * Match image based urls
     */
    $pattern = '!http://([a-z0-9\-\.\/\_]+\.(?:jpe?g|png|gif))!Ui';
    $replace='<p><img src="$MY_MARKERhttp://$1$MY_MARKER"></p>'; // Use it here...
    $postImages = preg_replace($pattern,$replace,$post);

    /**
     * Match url based
     */
    $pattern='/(?<!$MY_MARKER)http://([a-z0-9\-\.\/\_]+(?:\S|$))(?!$MY_MARKER)/i';//...here
    $replace='<a href="$1">$1</a>';
    $postUrl = preg_replace($pattern,$replace, $postImages);


    /**
     * Remove all markers
     */
    $postUrl = str_replace( $MY_MARKER, '', $postUrl);

    return $postUrl;
}
试着选择一个没有机会在帖子中出现的标记。
HTH

使用标记器怎么样


public function smartConvertPost($post) {
    $MY_MARKER="<MYMARKER>"; // Define the marker here

    /**
     * Match image based urls
     */
    $pattern = '!http://([a-z0-9\-\.\/\_]+\.(?:jpe?g|png|gif))!Ui';
    $replace='<p><img src="$MY_MARKERhttp://$1$MY_MARKER"></p>'; // Use it here...
    $postImages = preg_replace($pattern,$replace,$post);

    /**
     * Match url based
     */
    $pattern='/(?<!$MY_MARKER)http://([a-z0-9\-\.\/\_]+(?:\S|$))(?!$MY_MARKER)/i';//...here
    $replace='<a href="$1">$1</a>';
    $postUrl = preg_replace($pattern,$replace, $postImages);


    /**
     * Remove all markers
     */
    $postUrl = str_replace( $MY_MARKER, '', $postUrl);

    return $postUrl;
}
试着选择一个没有机会在帖子中出现的标记。 HTH

布拉德·克里斯蒂(Brad Christie)的preg_replace_回调建议很好。以下是一种可能的实现:

函数smartpost$post {//免责声明:这个URL提取正则表达式远非理想。 $pattern='!http://[a-z0-9\-.\uz\!$&'*+,;=:/?[\]@%]+!i'; $replace=''句柄\ URL \回调'; 返回preg_replace_回调$pattern、$replace、$post; } 函数\u handle\u URL\u回调$matches {//preg\u replace\u回调传递了一个参数:$matches。 如果preg|u match'/\.?:jpe?g | png | gif?:$|[?]/',$matches[0] {//如果路径以.GIF、.PNG、.JPG或.JPEG结尾,则为图像。 回来 }//否则将作为非图像处理。 回来 } 请注意,用于提取URL的正则表达式并不理想。把它做好是很棘手的。请参阅以下参考资料:

杰夫·阿特伍德。 约翰·格鲁伯著。 真的是你的。 编辑:增加了识别具有查询或片段的图像URL的功能。

Brad Christie的preg\u replace\u回调建议很好。以下是一种可能的实现:

函数smartpost$post {//免责声明:这个URL提取正则表达式远非理想。 $pattern='!http://[a-z0-9\-.\uz\!$&'*+,;=:/?[\]@%]+!i'; $replace=''句柄\ URL \回调'; 返回preg_replace_回调$pattern、$replace、$post; } 函数\u handle\u URL\u回调$matches {//preg\u replace\u回调传递了一个参数:$matches。 如果preg|u match'/\.?:jpe?g | png | gif?:$|[?]/',$matches[0] {//如果路径以.GIF、.PNG、.JPG或.JPEG结尾,则为图像。 回来 }//否则将作为非图像处理。 回来 } 请注意,用于提取URL的正则表达式并不理想。把它做好是很棘手的。请参阅以下参考资料:

杰夫·阿特伍德。 约翰·格鲁伯著。 真的是你的。
编辑:增加了识别带有查询或片段的图像URL的功能。

我90%肯定相关链接下的右侧链接对此的回答超过了4、5或6次。发帖前,请在键入您的问题后花点时间浏览列出的问题。@Bras 4、5或6?我会说更多。@ClementHerreman:或多或少只是在草堆中引用。.-如果你做了一个谷歌网站:stackoverflow.com链接到img-anchor,你会得到成百上千的保证-否,因为它们与html标记相关。我们谈论的字符串和这篇文章类似,只是看起来更像这样:例子中有一个,然后是一个像这样的图片链接。你需要将其正则化,并制作URL href链接和图像URL图像标记。我90%肯定相关下方右侧的链接回答了4、5或6次。发帖前,请在键入您的问题后花点时间浏览列出的问题。@Bras 4、5或6?我会说更多。@ClementHerreman:或多或少只是在草堆中引用。.-如果你做了一个谷歌网站:stackoverflow.com链接到img-anchor,你会得到成百上千的保证-否,因为它们与html标记相关。我们谈论的字符串和这篇文章类似,只是看起来更像这样:例子中有一个,然后是一个像这样的图片链接。你需要将其正则化,并制作URL href链接和图像URL图像标记。没有,但这不是我所要求的。我不是在分析网页。我正在解析没有要转换为标记的原始字符串。@Levi:这是以前做过的,这是响应的基本前提。已经完成了
在javascript、php、html、perl中,您可以随意选择。基本上,将一个字符串传递给我推荐的正则表达式引擎,让它返回所有URL匹配,我将让您决定模式。然后,在回调中,确定它是否值得使用图像或锚定,并返回新格式化的结果。不接受,但这不是我所要求的。我不是在分析网页。我正在解析没有要转换为标记的原始字符串。@Levi:这是以前做过的,这是响应的基本前提。它是用javascript、php、html、perl完成的,-随便你说。基本上,将一个字符串传递给我推荐的正则表达式引擎,让它返回所有URL匹配,我将让您决定模式。然后,在回调中,确定它是否值得使用图像或锚定,并返回新格式化的结果。