【发布时间】:2019-01-12 02:31:30
【问题描述】:
我有一个包含 youtube 网址的文本。我想将所有 youtube 网址转换为嵌入代码。 例如:
来自
到
* Sample
++++
<iframe width="560" height="315" src="https://www.youtube.com/embed/S-thTTqefls?start=60" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
++++
* Sample
++++
<iframe width="560" height="315" src="https://www.youtube.com/embed/xcJtL7QggTI?start=60" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
++++
第一种方法
我想在嵌入代码之间推送匹配的 youtube URL。但我不知道该怎么做?
> "++++\n" + "<iframe width=\"560\" height=\"315\" src=\"" + How can I
> push URL here with following code?
> + "\" frameborder=\"0\" allow=\"autoplayencrypted-media\" allowfullscreen></iframe>\n++++"
字符串内容 = readFileAsString(Path); 模式 MY_PATTERN = Pattern.compile("^(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$"); 匹配器 m = MY_PATTERN.matcher(Content); 内容 = m.replaceAll("++++\n" + "\n++++");
Content = Content.replace("youtu.be", "youtube.com/embed");
Content = Content.replace("?t=", "?start=");
第二种方法
我尝试通过在循环中查找所有 youtube URL 并放置嵌入代码 bu 子字符串方法来放置嵌入代码。
"\n++++\n<iframe width=\"560\" height=\"315\" src=\"" 44 个字符
https://youtu.be/S-thTTqefls?t=60 最多 34 个字符
for (int i = -1; (i = Content.indexOf("https://youtu.be", i + 1)) != -1; i++) {
Content = Content.substring(0, i) + "\n++++\n<iframe width=\"560\" height=\"315\" src=\"" + Content.substring(i, Content.length());
Content = Content.substring(0, i + 78) + "\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen></iframe>\n++++\n" + Content.substring(i + 78, Content.length());
}
Content = Content.replace("youtu.be", "youtube.com/embed");
Content = Content.replace("?t=", "?start=");
但某些https://youtu.be URL 没有嵌入代码。但我有这样一个奇怪的输出。
> ++++ <iframe width="560" height="315" src="
> ++++ <iframe width="560" height="315" src="<iframe width="560" height="315" src="
> ++++ <iframe width="560" height="315" src=" https://youtube.com/watch?v=xcJtL7QggTI?t=60" frameborder="0"
> allow="autoplay; encrypted-media" allowfullscreen></iframe>
> ++++
>
> " frameborder="0" allow="autoplay; encrypted-media"
> allowfullscreen></iframe>
> ++++
>
> " frameborder="0" allow="autoplay; encrypted-media"
> allowfullscreen></iframe>
> ++++
【问题讨论】:
-
文本是指文本文件吗?
-
是的。我阅读了文本文件的所有内容并传输了评论字符串。
-
我不确定你为什么在这里使用正则表达式。看起来您只想替换
* Sample之后的行,不管它是什么,因此不需要正则表达式,至少根据您发布的内容。在这种情况下,只需遍历所有行,检查它是否为* Sample,如果是,则将一些boolean值(如afterSample)设置为true。如果afterSample是真正的读取行但写入其替换版本(用<iframe ...>包围。 -
我有不同的 youtube 网址,彼此的 id 不同。 ...watch?v=xcJtL7QggTI ...watch?v=thTTqefls 有没有不使用正则表达式的简单方法?
-
但据我所知,您并没有修改这些 URL。那么,如果您知道这些 URL 在字符串中的位置(
* Sample之后的下一行),那么这里的正则表达式有什么意义呢?