首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取来自引用的preg_replace返回的奇怪字符

获取来自引用的preg_replace返回的奇怪字符
EN

Stack Overflow用户
提问于 2015-04-08 15:19:01
回答 2查看 66关注 0票数 0

我试图用preg_replace来匹配所有的youtube链接,并将它们替换为其他链接。

我将匹配标准链接和[youtube][/youtube]标签中的完整链接。

将匹配的内容示例:

代码语言:javascript
复制
https://www.youtube.com/watch?v=rB2uwRIVo1I&foo=jpiadSpjpj&moo=foo&cow=123
https://www.youtube.com/watch?v=rB2uwRIVo1I&foo=jpiadSpjpj&moo=foo&cow=123
[youtube]https://www.youtube.com/watch?v=rB2uwRIVo1I&foo=jpiadSpjpj&moo=foo&cow=123[/youtube]
[youtube]https://www.youtube.com/watch?v=rB2uwRIVo1I&foo=jpiadSpjpj&moo=foo&cow=123[/youtube]

与之不匹配的例子:

代码语言:javascript
复制
[youtube]rB2uwRIVo1I[/youtube]

现在,在用preg_match进行测试时,所有这些都很好;我用以下代码测试了preg_replace

代码语言:javascript
复制
$data = file_get_contents('data-all.txt');

$data = preg_replace('#(?:(?:\[youtube\])\s*)?(?:https?://)?(?:www\.)?(?:youtube\.com)/watch\?[^\s]*v=([a-zA-Z0-9_-]+)[^\s]*(?:\s*(?:\[/youtube\]))?#im', "[youtube]\0[/youtube]", $data);

echo $data;

现在,我试图用它们各自的youtube ID替换所有匹配的[youtube]标记,如下所示:

代码语言:javascript
复制
[youtube]rB2uwRIVo1I[/youtube]

这也很好,但是放置在[youtube]中的文本是一个奇怪的字符,而不是视频的youtube ID。

示例:

我还尝试使用\1引用并得到了相同的结果。

我在这里做错什么了?这是某种字符集的问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-08 15:24:02

您需要在替换字符串中转义反斜杠,或者使用$n。通过尝试使用\0\1,您将插入值分别为0和1的字符代码。另外,由于您想要第一个捕获组,所以需要1,而不是0;0是整个匹配的字符串。

IOW,改变这一点:

代码语言:javascript
复制
"[youtube]\0[/youtube]"

以下列方式之一:

代码语言:javascript
复制
"[youtube]\\1[/youtube]"

代码语言:javascript
复制
"[youtube]$1[/youtube]"

后者通常是首选的。文献资料包含更多信息。

票数 2
EN

Stack Overflow用户

发布于 2015-04-08 15:28:01

只需在替换部分中使用单引号而不是双引号。

代码语言:javascript
复制
$data = preg_replace('#(?:(?:\[youtube\])\s*)?(?:https?://)?(?:www\.)?(?:youtube\.com)/watch\?[^\s]*v=([a-zA-Z0-9_-]+)[^\s]*(?:\s*(?:\[/youtube\]))?#im', '[youtube]\0[/youtube]', $data);

似乎您需要在替换部分中使用\1来获得所需的输出。

代码语言:javascript
复制
$data = preg_replace('#(?:(?:\[youtube\])\s*)?(?:https?://)?(?:www\.)?(?:youtube\.com)/watch\?[^\s]*v=([a-zA-Z0-9_-]+)[^\s]*(?:\s*(?:\[/youtube\]))?#im', '[youtube]\1[/youtube]', $data);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29518738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档