我有以下C#正则表达式
@"(?:https?:\/\/)?(?:www\.)?(?:(?:(?:youtube\.com\/watch\?[^?]*v=|youtu\.be\/)))([\w-]+)";
如何更正此问题,以便正则表达式不会在网址开头使用双引号匹配网址。因此,如果URL位于超链接的href
属性中,则会被忽略而不会被捕获。
我已经在我的其他Twitter Regex模式中使用了这个表达式,但是我无法在这个模式中使用它。
(?<!"")
它适用于Twitter模式:
(?<!"")https?://twitter\.com/(?:#!/)?(\w+)/status(?:es)?/(\d+)
因此,YouTube Regex只应抓取网址开头没有双引号的网址。
答案 0 :(得分:0)
要回答这个问题:如果当前位置之前没有(?<!")
,则"
将无法匹配。如果在当前位置之前必须没有"
后面跟着0+其他字符,则可以利用.NET 无限宽度的后视。
在这种情况下,您可能希望将您的loobehind变为
(?<!"[^"<>]*)
请参阅regex demo。请注意,[^"<>]*
匹配除"
,<
和>
以外的0 +字符,因此,仅在元素节点" >如果 HTML完全序列化。如果它包含纯属<
或>
内部属性值,则此方法无法正常工作。
这就是为什么你应该考虑为这个任务使用适当的HTML解析器,因为你已经在项目中使用它了。如果你知道你想要达到的目标,我会更新答案。