我试图找出一种匹配3种不同URL类型的方法;它们是:
http://(www.)domain.com
或 www.domain.com
http://(www.)domain.com/image.jpg/.png/gif
或 www.domain.com/image.jpg/.png/.gif
http://(www.)youtube.com/watch?v=Li1zXaEYol8
或 www.youtube.com/watch?v=Li1zXaEYol8
请注意,如果它们只是不带http或www的domain.com,则我不希望对其进行解析。
我面临的问题是让这三个-甚至两个一起工作,
我有一个可以自动链接的类,因此如果http://或www包含某些内容。它将链接它,但是如果我放入图像,它将解析图像中URL的HTML,例如:
<img src="<a href="www.domain.com">domain.com</a>" />
这是垃圾:(
我还想扫描YouTube URL,然后用嵌入代码替换该URL,以便显示视频而不是URL。我可以从URL中提取ID,但无法进行替换。
请注意,这是在文本区域(例如评论字段)上进行的,人们在其中输入评论,因此,为什么自动链接URL,解析图像和YouTube视频的HTML会很好。
通过SQL查询并回显$ comments ['message']来显示数据,并提供一些str_replace东西来进行一些简单的格式化。
任何帮助,将不胜感激。
最佳答案
干得好:
(?:http:\/\/www\.|http:\/\/|www\.)(?:youtube\.com\/watch\?v=(?:\w+)|domain\.com\/image.(?:jpg|png|gif)|domain\.com)
或使用定界符:
~(?:http:\/\/www\.|http:\/\/|www\.)(?:youtube\.com\/watch\?v=(?:\w+)|domain\.com\/image.(?:jpg|png|gif)|domain\.com)~i
您可以test the above RegExs @ Robular。
要确定URL是否在不需要的HTML标记内,建议您使用DOM解析器。
另外,请查看以下相关问题: How to mimic StackOverflow Auto-Link Behavior 。
关于YouTube替代品,您可以执行以下操作:
echo preg_replace('~youtube\.com\/watch\?v=(\w+)~i', 'embed code $1', $comments['message']);
关于php - PHP正则表达式用于不同的URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2040284/