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;
?>

^とあなたが使用したものは間違っています。それらは文字列の最初または最後を表し、文字列の最初と最後にある場合はその部分$だけを置き換えることはありません。<##...##><####>

また、?afterは、から次までの.*すべてに一致することを意味します。使用すると、最初から最後まですべてに一致するため、結果は次のようになります。<####>.*<####>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 に答える