我对正则表达式毫无用处,任何建议都非常感激。
$url = 'http://somedomain.com?var=<##var##>&var2=<##var2##>';
echo preg_replace('^<##(.*)##>$', '', $url);
尝试剥离(包括)&lt; ##和##&gt;之间的任何内容。所以我的结果是:
http://somedomain.com?var=&var2=
由于
答案 0 :(得分:7)
代码应为:
<?php
$url = 'http://somedomain.com?var=<##var##>&var2=<##var2##>';
$newUrl = preg_replace('/<##.*?##>/', '', $url);
echo $url;
?>
您使用的^
和$
错误,它们代表字符串的开头或结尾,如果<##...##>
您不会只替换<##
部分位于字符串末尾的##>
处。
?
之后.*
表示它匹配<##
到下一个##>
之间的所有内容。如果您使用.*
,它会匹配从第一个<##
到最后一个##>
的所有内容,因此您的结果将是http://somedomain.com?var=
答案 1 :(得分:2)
将<##.*?##>
的所有匹配替换为空字符串。
$url = 'http://somedomain.com?var=<##var##>&var2=<##var2##>';
echo preg_replace('/<##.*?##>/', '', $url);
诀窍是?,这意味着“尽可能少地匹配,但我必须尽可能多地匹配。”
答案 2 :(得分:1)
你和你的正则表达式很接近。
^
表示“行首”,而$
表示“行尾”。删除它们,否则它只会匹配整个字符串是<##var##>
。
.*
表示匹配任何内容。包括>
。您的正则表达式将匹配<##var##>&var2=<##var2##>
,而不仅仅是每个组。
试试这个正则表达式:
<##([^>]*)##>
答案 3 :(得分:0)
echo preg_replace('(<##.+?##>)', '', $url);