不要将YouTube网址与起始双引号匹配 - C#Regex

时间:2017-02-17 10:29:09

标签: c# regex regex-negation

我有以下C#正则表达式

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

如何更正此问题,以便正则表达式不会在网址开头使用双引号匹配网址。因此,如果URL位于超链接的href属性中,则会被忽略而不会被捕获。

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

(?<!"")

它适用于Twitter模式:

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

因此,YouTube Regex只应抓取网址开头没有双引号的网址。

1 个答案:

答案 0 :(得分:0)

要回答这个问题:如果当前位置之前没有(?<!") ,则"将无法匹配。如果在当前位置之前必须没有"后面跟着0+其他字符,则可以利用.NET 无限宽度的后视。

在这种情况下,您可能希望将您的loobehind变为

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

请参阅regex demo。请注意,[^"<>]*匹配除"<>以外的0 +字符,因此,仅在元素节点" >如果 HTML完全序列化。如果它包含纯属<>内部属性值,则此方法无法正常工作。

这就是为什么你应该考虑为这个任务使用适当的HTML解析器,因为你已经在项目中使用它了。如果你知道你想要达到的目标,我会更新答案。