我有这个网址
{{ 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
任何想法我做错了什么?
由于
答案 0 :(得分:1)
如果要删除的字符串是常量,您可以这样做:
$out = str_replace("{{ url:sites }}","",$url);
或者,如果您的搜索字词可能出现在目标字符串中的最轻微变化:
$out = substr($url,strlen("{{ url:sites }}"));
答案 1 :(得分:0)
[]
是一个字符类,无论你在该类中放置什么,都被视为匹配任何一个字符中的一个字符。
为您尝试以下两个示例中的任何一个:
$url2 = preg_replace('~.*?(?=/files)~', '', $url);
print "$url2\n";
和
$url3 = preg_replace('~\{\{ url:sites \}\}~', '', $url);
print "$url3\n";
答案 2 :(得分:0)
最简单的方法可能是这样的:
$url = "{{ url:sites }}/files/large/49a076e0c8244c458b2ff9ca3a25a811.jpg";
print preg_replace('%\{\{.*?\}\}%', '', $url);
你必须逃避{
和}
,因为它们在正则表达式中具有特殊含义。 .*
匹配{{
和}}
之间的所有内容,?
使其非贪婪,因此如果您有两个{{ ... }}
套,则会赢得&#39} ; t从第一个{{
开始,以最后一个}}
结束。
例如:
{{ url:sites }}/bla/bla/{{ path:somewhere }}
如果您未使用?
,则会替换所有内容(在第一个{{
和最后一个}}
之间)。但是使用?
它会替换单独的{{ ... }}
集,因此您将获得:
/bla/bla/