嘿,我很难理解正则表达式,但我认为最符合我需求的是这一行:
$str = preg_replace('/https:\/\/clips.twitch.tv\/(.*?)/', '<iframe src="https://clips.twitch.tv/embed?autoplay=false&clip=$1&tt_content=embed&tt_medium=clips_embed" width="640" height="360" frameborder="0" scrolling="no" allowfullscreen="true"></iframe>', $text);
我想要的是替换f.ex这个链接:
https://clips.twitch.tv/GleamingHelpfulOxNotLikeThis
成为替换部分中的HTML,但最后一部分是f.ex. GleamingHelpfulOxNotLikeThis
在iframe后面而不是clip=
之后,我认为$1
我认为可行。{/ 1>
答案 0 :(得分:0)
.*?
会匹配域名后的所有内容,因此您需要在匹配中包含整个行的其余部分。使用?
使其变得非贪婪并没有帮助,因为在通配符之后没有任何内容会导致它停止。
如果网址的最后一部分只是一个字母数字字符串,请使用\w*
代替.*
。
如果不是这些URL的构造方式,您需要找到一些其他方法来告知URL在文本中的结束位置。这不是微不足道的,往往需要行为不端的启发式方法。 URL可以使用大多数字符而不需要任何转义,包括大多数标点符号,但是当人们将它们键入自由流动的文本时,他们通常会在它们之后添加标点符号并打算将其区分开来。例如,某人可能写道:
Is the URL http://www.foo.com/foobarbaz?
他们打算?
将其标记为问题,以便网址以foobarbaz
结尾,但?
是网址中的有效(和常见)字符,因此& #39;没有理由http://www.foo.com/foobarbaz?
无法成为预期的网址。作为人类,我们通常没有问题从上下文中解决这个问题,但一个简单的正则表达式几乎没有希望。我已经看到许多自动URL识别器像这样陷入困境。
因此,您应该做好准备,无论您使用什么作为正则表达式,它都可能无法正确解析所有URL,除非对可以使用的URL有限制。