查找特殊字符的RegEx

时间:2014-04-11 09:12:24

标签: php regex

我有这个网址

{{ 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

任何想法我做错了什么?

由于

3 个答案:

答案 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/