youtube网址检查正则表达式

时间:2015-09-14 14:39:25

标签: php regex youtube

我查看我的网站文章以获取youtube链接并将其自动转换为youtube html。

问题是,如果有人想要链接到youtube网址,则网址会通过链接进行解析,从而提供损坏的HTML。

这是使用我为url创建的BBCode解析器:

[url=address]text[/url]

这是当前的正则表达式:

~(?:http|https|)(?::\/\/|)(?:www.|)(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/ytscreeningroom\?v=|\/feeds\/api\/videos\/|\/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[a-z0-9;:@#?&%=+\/\$_.-]*~i

所以,我尝试在开头添加:

(?<!\[url=)

看起来像:

~(?<!\[url=)(?:http|https|)(?::\/\/|)(?:www.|)(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/ytscreeningroom\?v=|\/feeds\/api\/videos\/|\/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[a-z0-9;:@#?&%=+\/\$_.-]*~i

因此,如果它在它之前检测到url bbcode部分,则不将其解析为youtube html,但它似乎不起作用。

它的行为就好像我的负面观察不存在,并且会正常处理youtube网址。

这是有问题的网址:

[url=https://www.youtube.com/watch?v=jHnvVX_T1AA]

所以它不应该选择它,因为它前面是url bbcode。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

总而言之,您有一个类似于zabcd的字符串和类似的模式:(?<!z)(?:ab)?cd

该模式将在&#34; a&#34;的位置失败。由于外观,但由于ab是可选的,因此模式在&#34; c&#34;的位置成功。 (前面没有&#34; z&#34;)。