正则表达式新秀需要帮助

时间:2012-05-01 15:53:53

标签: php regex

我对正则表达式毫无用处,任何建议都非常感激。

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

尝试剥离(包括)&lt; ##和##&gt;之间的任何内容。所以我的结果是:

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

由于

4 个答案:

答案 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);