Regex 正则表达式-不在列表中,但仍然匹配

Regex 正则表达式-不在列表中,但仍然匹配,regex,Regex,这在标题中有点难以概括,但我的问题是: (?:(?:http|https):\\/\\/)?(?:\\/\\/www\\.)?youtube.com\\/watch\\?(?:.*)v=(\\w{11}).* 考虑到下面给出的表达式,我真的不明白为什么ftp://www.youtube.com/watch?v=F5eScJmYZZ8 比赛。我尝试将^添加到表达式的开头,但没有成功,但是,我的表达式不再匹配任何内容。这是在Java中完成的,这解释了双反斜杠的原因 ftp在http | ftp中显

这在标题中有点难以概括,但我的问题是:

(?:(?:http|https):\\/\\/)?(?:\\/\\/www\\.)?youtube.com\\/watch\\?(?:.*)v=(\\w{11}).*
考虑到下面给出的表达式,我真的不明白为什么ftp://www.youtube.com/watch?v=F5eScJmYZZ8 比赛。我尝试将^添加到表达式的开头,但没有成功,但是,我的表达式不再匹配任何内容。这是在Java中完成的,这解释了双反斜杠的原因

ftp在http | ftp中显然没有列出,如何被接受

编辑

准确地说,以下是允许的:

https://www.[...] https://[…] www.[…] [...] 没有别的了。

因为前面的?:?:http | https:\/\\/?是可选的。这就是组末尾的问号表示最多匹配一次,即仅当匹配存在时才匹配

但前导“^”应阻止与ftp的匹配。你能发布你用^尝试的失败正则表达式吗

更新:

啊哈!它匹配时不带“^”,因为http组是可选的,任何东西都可以在匹配之前出现,例如cheeseyoutube.com/。。。会匹配的。在正则表达式的开头添加^可以解决这个问题,但正则表达式还有另一个问题:www组正试图匹配中首次指出的两个斜杠,而一旦http组已经匹配了这些斜杠,它就无法匹配。因此,www组无法很好地匹配,因为它是可选的,但是youtube部分无法匹配,因为有一个不匹配的www挡道

这将解决您的问题:

^(?:(?:http|https):\\/\\/)?(?:www\\.)?youtube.com\\/watch\\?(?:.*)v=(\\w{11}).*
因为前面的?:?:http | https:\\/\\\/?是可选的。这就是组末尾的问号表示最多匹配一次,即仅当匹配存在时才匹配

但前导“^”应阻止与ftp的匹配。你能发布你用^尝试的失败正则表达式吗

更新:

啊哈!它匹配时不带“^”,因为http组是可选的,任何东西都可以在匹配之前出现,例如cheeseyoutube.com/。。。会匹配的。在正则表达式的开头添加^可以解决这个问题,但正则表达式还有另一个问题:www组正试图匹配中首次指出的两个斜杠,而一旦http组已经匹配了这些斜杠,它就无法匹配。因此,www组无法很好地匹配,因为它是可选的,但是youtube部分无法匹配,因为有一个不匹配的www挡道

这将解决您的问题:

^(?:(?:http|https):\\/\\/)?(?:www\\.)?youtube.com\\/watch\\?(?:.*)v=(\\w{11}).*
因为??在http部分之后,表示它是可选的。用+代替

另外,您要在http之后检查//两次

\s*允许在开头使用空格。如果您不想允许空白,即输入文本只包含1个匹配项,请改用^

以下是满足所有附加要求的工作正则表达式:

\s*(?:(http|https)\:\/\/)?(?:www\.)?youtube.com\/watch\?(?:.*)v=(\w{11}).*
因为??在http部分之后,表示它是可选的。用+代替

另外,您要在http之后检查//两次

\s*允许在开头使用空格。如果您不想允许空白,即输入文本只包含1个匹配项,请改用^

以下是满足所有附加要求的工作正则表达式:

\s*(?:(http|https)\:\/\/)?(?:www\.)?youtube.com\/watch\?(?:.*)v=(\w{11}).*

嘿,为什么亲爱的stackers从我的邮件中删除了?这是我的版权介绍!如果添加^,那么给定的链接是否也匹配?真的吗?我想是这样的:\\/\\/www\\。?应该转换成这样吗?:www\\\?这是绝对正确的。我要买一双新眼睛:嘿,为什么亲爱的斯塔克斯从我的邮件中删除了?这是我的版权介绍!如果添加^,那么给定的链接是否也匹配?真的吗?我想是这样的:\\/\\/www\\。?应该转换成这样吗?:www\\\?这是绝对正确的。我要买双新眼睛:@Cameron,但他说他试图在表情开头加上^,但没有成功。@Karolis:对。添加“^just”意味着匹配一个字符串,该字符串可以选择以http | https开头,前面没有任何内容。它仍然是可选的。@Karolis:哦,等等,你完全正确。^应阻止与ftp的匹配。也许OP把它放在了第一个组中?在这种情况下,我想问题来自于我对Java的使用。^^^正则表达式定义如下:?:http ^;https:\\/\\/\?:\\/\\\\/www\\\.?youtube.com\\\/watch\\\:.*v=\\w{11}.*不再匹配任何东西了。完美!感谢更新:D pfff,我没有看到我在两个位置包括了//谢谢大家的帮助和时间@卡梅隆,但他说他试图在开头加上“^”,但没有成功。@Karolis:对。添加“^just”意味着匹配一个字符串,该字符串可以选择以http | https开头,前面没有任何内容。它仍然是可选的。@Karolis:哦,等等,你完全正确。^应阻止与ftp的匹配。也许OP把它放在了第一个组中?在这种情况下,我想问题来自于我对Java的使用。^^^正则表达式定义如下:?:http ^;https:\\/\\/\?:\\/\\\\/www\\\.?youtube.com\\\/watch\\\:.*v=\\w{11}.*不再匹配任何东西了。完美!感谢更新:D pfff,我没有看到我在两个位置包含了//谢谢大家的帮助&
你的时间!我在最初的帖子中增加了精确性。我希望它保持可选,只允许http或https作为协议。为什么要匹配多个http://节?+指一个或多个。如果你希望它不是可选的,只需省略?。我在最初的帖子中添加了一个精度。我希望它保持可选,只允许http或https作为协议。为什么要匹配多个http://节?+指一个或多个。如果希望它不是可选的,只需省略?。