Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查找特殊字符的正则表达式_Php_Regex - Fatal编程技术网

Php 查找特殊字符的正则表达式

Php 查找特殊字符的正则表达式,php,regex,Php,Regex,我有这个网址 {{ url:sites }}/files/large/49a076e0c8244c458b2ff9ca3a25a811.jpg 我需要得到这个网址: /files/large/49a076e0c8244c458b2ff9ca3a25a811.jpg 我尝试了多个正则表达式,除了导致错误外,没有一个有效 这里有一些我试过的 $thumbImage = preg_replace("/^[url\:site]/", '', $movingImageThumb); // this w

我有这个网址

{{ url:sites }}/files/large/49a076e0c8244c458b2ff9ca3a25a811.jpg
我需要得到这个网址:

/files/large/49a076e0c8244c458b2ff9ca3a25a811.jpg
我尝试了多个正则表达式,除了导致错误外,没有一个有效

这里有一些我试过的

$thumbImage = preg_replace("/^[url\:site]/", '', $movingImageThumb); // this works but doesn't remove {{ }}

$thumbImage = preg_replace("/[\{\{url\:site\}\}]/", '', $movingImageThumb);//throws an error

$thumbImage = preg_replace("/[{{url\:site}}]/", '', $movingImageThumb);// throws an error
知道我做错了什么吗


谢谢

[]
是一个字符类,您在该类中放置的任何字符都被视为与这些字符中的任何一个字符匹配

请尝试以下两个示例中的任意一个:

$url2 = preg_replace('~.*?(?=/files)~', '', $url);
print "$url2\n";
以及


如果要删除的字符串是常量,则可以执行以下操作:

$out = str_replace("{{ url:sites }}","",$url);
或者,如果您的搜索词在目标字符串中出现的变化很小:

$out = substr($url,strlen("{{ url:sites }}"));

最简单的方法可能是这样:

$url = "{{ url:sites }}/files/large/49a076e0c8244c458b2ff9ca3a25a811.jpg";
print preg_replace('%\{\{.*?\}\}%', '', $url);
您必须转义
{
}
,因为它们在正则表达式中有特殊的含义
*
匹配
{{
}
之间的所有内容,而
使其不贪婪,因此如果有两个
{…}
集,它不会从第一个
{
开始,以最后一个
}
结束

例如:

{{ url:sites }}/bla/bla/{{ path:somewhere }}
如果您不使用
它将替换所有的
{{{
和最后一个
}
)。但是使用
它将替换单独的
{{…}
集合,因此您将得到:

/bla/bla/

我猜无论你用什么语言,你都有逃避问题
{
}
具有regexp特殊含义您不能使用简单的
str_replace()
?以前未使用过
~
-这是PHP特定的正则表达式字符吗?@freefaller任何非字母数字和非空白字符都可以用作分隔符。就我个人而言,我使用括号是因为它们成对出现,因此无论正则表达式是什么,都不需要转义。@Niet,如果你不小心的话,你每天都会学到新东西;-)谢谢
/bla/bla/