我需要解析几个页面才能获取所有的Youtube ID。Youtube完成Java Regex
我在网上发现了很多正则表达式,但是:Java的不完整(它们要么给我ID以外的垃圾,要么丢失一些ID)。
我发现那个似乎是完整的是托管here。但它是用JavaScript和PHP编写的。不幸的是我无法将它们翻译成JAVA。
有人可以帮我重写这个PHP正则表达式或Java中的下列JavaScript之一吗?
'~
https?:// # Required scheme. Either http or https.
(?:[0-9A-Z-]+\.)? # Optional subdomain.
(?: # Group host alternatives.
youtu\.be/ # Either youtu.be,
| youtube\.com # or youtube.com followed by
\S* # Allow anything up to VIDEO_ID,
[^\w\-\s] # but char before ID is non-ID char.
) # End host alternatives.
([\w\-]{11}) # $1: VIDEO_ID is exactly 11 chars.
(?=[^\w\-]|$) # Assert next char is non-ID or EOS.
(?! # Assert URL is not pre-linked.
[?=&+%\w]* # Allow URL (query) remainder.
(?: # Group pre-linked alternatives.
[\'"][^<>]*> # Either inside a start tag,
| </a> # or inside <a> element text contents.
) # End recognized pre-linked alts.
) # End negative lookahead assertion.
[?=&+%\w]* # Consume any URL (query) remainder.
~ix'
/https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w]*(?:['"][^<>]*>|<\/a>))[?=&+%\w]*/ig;
为什么可选的子域不允许小写字母一样吗?您可能需要将该部分更改为'... [0-9A-Za-z - ] ...' – eykanal
@eykanal它使用'i'标志。 – Marcus
@马库斯 - 啊,很好,在正则表达式中没有读到那么远。 – eykanal