请勿与YouTube URL与启动双引号-C#REGEX相匹配



我有以下C#REGEX

@"(?:https?://)?(?:www.)?(?:(?:(?:youtube.com/watch?[^?]*v=|youtu.be/)))([w-]+)";

我该如何纠正此问题,以便在URL开头的ROGEX与Double引用的URL匹配。因此,如果URL位于超链接中的href属性中,则将被忽略而不会捕获。

我已经在我的其他Twitter Regex模式中使用了此表达式,但是我无法在此中使用它。

(?<!"")

它在Twitter模式上工作:

(?<!"")https?://twitter.com/(?:#!/)?(w+)/status(?:es)?/(d+)

因此,YouTube正则应在URL开始时仅抓住不带双引号的URL。

回答问题:如果在当前位置之前没有" (?<!")将失败。如果在当前位置之前必须没有",则必须使用0个以上的其他字符,您可以利用.net .net infinite width lookbehind。

在这种情况下,您可能需要将loobehind变成

(?<!"[^"<>]*)

请参阅正则演示。请注意,[^"<>]*匹配"<>以外的0 字符,因此,仅在元素节点内部中,才会检查"。如果它包含普通的<>内部属性值,则此方法将无法工作。

这就是为什么您也应该考虑使用适当的HTML解析器来完成此任务,因为您已经在项目中使用了它。如果您知道您要实现的目标,我将更新答案。

最新更新