好吧,我想使用preg_replace从url中提取参数。 现在我有这样的事情:
preg_replace("%(?<=[\?&])$param=.+(&|$)%", '', $url);
但它并没有奏效。问题在于表达的结束。 如何编写可执行以下操作的表达式:&#34; match&amp;字符或字符串的结尾&#34;?
答案 0 :(得分:2)
我对你的帖子感到有点困惑,因为你说你想要&#34;提取&#34;参数,但是你说你想要使用preg_replace
。如果您想要实际提取参数以便处理它们,那么您可能需要preg_match_all
。如果想要更换问号及其后面的所有内容,(我认为您正在尝试从示例代码中完成),这很容易实现。像这样的东西会这样做:
$string = 'https://www.google.com/search?q=Metallica+Turn+The+Page&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a&channel=sb';
$string = preg_replace('~\?.*~', '', $string);
print $string;
这会查找问号\?
,后跟任意字符.
,任意次*
,然后将其替换为空。这会给你:
https://www.google.com/search
如果你想用某些东西实际替换每个参数,你也可以这样做
// REPLACE ALL OF THE PARAMS WITH DUMMY-PARAM
$string = 'https://www.google.com/search?q=Metallica+Turn+The+Page&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a&channel=sb';
$string = preg_replace('~[?&]\K([A-Z0-9+%]+)=.+?(?=&|$)~i', '$1=DUMMY-PARAM', $string);
print "\n\n".$string;
或者
// REPLACE ALL OF THE KEYS WITH DUMMY-KEY
$string = 'https://www.google.com/search?q=Metallica+Turn+The+Page&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a&channel=sb';
$string = preg_replace('~[?&]\K[A-Z0-9+%]+=(.+?)(?=&|$)~i', 'DUMMY-KEY=$1', $string);
print "\n\n".$string;
或者
// PULL OUT ALL KEYS/VALUES
$string = 'https://www.google.com/search?q=Metallica+Turn+The+Page&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a&channel=sb';
$string = preg_replace('~[?&]\K([A-Z0-9+%]+)=(.+?)(?=&|$)~i', "\n$1: $2", $string);
print "\n\n".$string;
所有这三个都是从一个字符类开始寻找问号或&符号。 \K
告诉表达式一旦找到它之前的内容就开始匹配。然后我们查找键,这是一些URL字符的字符类,后跟一个等号,后跟至少一个字符(但可以更多),一直到它到达表达式的下一部分。在这里,我使用.+?
来表示,但是使用字符类会更好。类似这样的东西适用于这个表达式:([-.:A-Z0-9+%]+)?
。在任何情况下,表达式的下一部分都是先行检查,看看是否会出现&符号或者行的末尾。
Here is a working demo for you to compare the differences
希望能够正确回答您的问题。正如我之前提到的,我对此感到困惑。如果没有,请告诉我,我会重新评估。