Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php url参数正则表达式_Php_Regex - Fatal编程技术网

Php url参数正则表达式

Php url参数正则表达式,php,regex,Php,Regex,我创建了自己的通讯模块,遇到了一个(大)问题。 该系统使用附加参数格式化所有URL,以跟踪google analytics中的点击 e、 g。 像这样的url 变成这样 还有像这样的url 变成这样 第一个例子是假的。我知道第一个符号必须被一个符号替换,这就是问题所在。 我正在使用此模式提取url的 $pattern = array('#[a-zA-Z]+://([-]*[.]?[a-zA-Z0-9_/-?&%\{\}])*#'); $replace = array('\\0&a

我创建了自己的通讯模块,遇到了一个(大)问题。 该系统使用附加参数格式化所有URL,以跟踪google analytics中的点击

e、 g。 像这样的url

变成这样

还有像这样的url

变成这样

第一个例子是假的。我知道第一个符号必须被一个符号替换,这就是问题所在。 我正在使用此模式提取url的

$pattern = array('#[a-zA-Z]+://([-]*[.]?[a-zA-Z0-9_/-?&%\{\}])*#');
$replace = array('\\0&utm_source=newsletter&utm_medium=e-mail&utm_campaign=test');
$body = preg_replace($pattern,$replace,$body);

有人能帮我找到一个正确且有效的正则表达式吗?所以第一个url参数总是包含一个问号而不是一个符号?

不是正则表达式,但它可以工作。它所做的只是检查是否有错误?如果找不到,请将第一个改为问号:

$url = (substr_count($url, '?')>0) ? $url : str_replace('&', '?', $url, 1);

一种非常简单的方法是查找类似
http://...&
其中,
不包含
问号或其他分隔符:

= preg_replace('#(http://[^\s"\'<>?&]+)&#', '$1?', $src);
只用

if(strpos($string,'?') !== false)
//add with ampersand
else
//add with question mark

此解决方案修复了所有以
开头的查询(并且缺少
)的URL:

$re='%([a-zA-Z]+://[^?&\s]+)&(utm_source=newsletter)%;
$body=预更换($re,$1?$2',$body);

为什么不使用
strpos
+串联?如果答案解决了您的问题,您应该通过在下面标记绿色V将其作为一个好答案来接受。
if(strpos($string,'?') !== false)
//add with ampersand
else
//add with question mark