我查看我的网站文章以获取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。
我做错了什么?
答案 0 :(得分:1)
总而言之,您有一个类似于zabcd
的字符串和类似的模式:(?<!z)(?:ab)?cd
该模式将在&#34; a&#34;的位置失败。由于外观,但由于ab
是可选的,因此模式在&#34; c&#34;的位置成功。 (前面没有&#34; z&#34;)。