我对正则表达式完全没用,任何建议都非常感谢。
$url = 'http://somedomain.com?var=<##var##>&var2=<##var2##>';
echo preg_replace('^<##(.*)##>$', '', $url);
试图剥离(包括)<## 和##> 之间的任何内容。所以我的结果是:
http://somedomain.com?var=&var2=
谢谢
代码应该是:
<?php
$url = 'http://somedomain.com?var=<##var##>&var2=<##var2##>';
$newUrl = preg_replace('/<##.*?##>/', '', $url);
echo $url;
?>
您使用的^
and$
是错误的,它们代表字符串的开头或结尾,如果位于字符串的开头和结尾,您将不会只替换<##...##>
部分。<##
##>
?
after也.*
意味着它匹配从<##
到 next的所有内容##>
。如果您使用.*
它匹配从第一个<##
到最后一个的所有内容,##>
那么您的结果将是http://somedomain.com?var=
<##.*?##>
用空字符串替换所有匹配项。
$url = 'http://somedomain.com?var=<##var##>&var2=<##var2##>';
echo preg_replace('/<##.*?##>/', '', $url);
诀窍是 ?,意思是“尽可能少地匹配,但我必须尽可能多地匹配”。
你很接近你的正则表达式。
^
表示“行首”,而$
, 表示“行尾”。删除它们,否则只有当整个字符串是<##var##>
.
.*
意味着匹配任何东西。包括>
. 您的正则表达式将匹配<##var##>&var2=<##var2##>
,而不仅仅是每个组。
试试这个正则表达式:
<##([^>]*)##>
echo preg_replace('(<##.+?##>)', '', $url);