1

我对正则表达式完全没用,任何建议都非常感谢。

$url = 'http://somedomain.com?var=<##var##>&var2=<##var2##>';
echo preg_replace('^<##(.*)##>$', '', $url);

试图剥离(包括)<## 和##> 之间的任何内容。所以我的结果是:

http://somedomain.com?var=&var2=

谢谢

4

4 回答 4

7

代码应该是:

<?php
$url = 'http://somedomain.com?var=<##var##>&var2=<##var2##>';
$newUrl = preg_replace('/<##.*?##>/', '', $url);
echo $url;
?>

您使用的^and$是错误的,它们代表字符串的开头或结尾,如果位于字符串的开头和结尾,您将不会只替换<##...##>部分。<####>

?after也.*意味着它匹配从<##到 next的所有内容##>。如果您使用.*它匹配从第一个<##到最后一个的所有内容,##>那么您的结果将是http://somedomain.com?var=

于 2012-05-01T16:00:12.433 回答
2

<##.*?##>用空字符串替换所有匹配项。

$url = 'http://somedomain.com?var=<##var##>&var2=<##var2##>';
echo preg_replace('/<##.*?##>/', '', $url);

诀窍是 ?,意思是“尽可能少地匹配,但我必须尽可能多地匹配”。

于 2012-05-01T15:58:16.847 回答
1

你很接近你的正则表达式。

^表示“行首”,而$, 表示“行尾”。删除它们,否则只有当整个字符串是<##var##>.

.*意味着匹配任何东西。包括>. 您的正则表达式将匹配<##var##>&var2=<##var2##>,而不仅仅是每个组。

试试这个正则表达式:

<##([^>]*)##>
于 2012-05-01T16:01:21.517 回答
0
echo preg_replace('(<##.+?##>)', '', $url);
于 2012-05-01T16:03:43.670 回答