我对正则表达式完全没用,任何建议都非常感谢。
$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);