我正在尝试编写一个脚本来记录留言板上的民意调票中的IP,只有在我们的某个民意调查中投票时才会触发。编辑:我是通过网络信标做的,因为我无法访问民意调查的编程。 /编辑
当脚本启动时,它需要知道正在投票的投票,因为通常会同时打开多个投票,并将选民的IP记录在专用于该投票的平面文件中
首先,我抓住引用网址,其格式如下:
http://subdomain.sample.com/t12345,action=vote
如果在引用URL中找到'vote',我接下来要做的就是抓住t#并将其转换为变量,这样我就可以在一个名为t12345.txt或12345.txt的文件中记录信息,只要它与民意调查的主题编号相匹配,或者也不重要。
/ t之后的数字是唯一应该在此URL中更改的内容。这里目前有5位数字,我预计不会很快改变。
我的问题是:如何从网址中获取此t#并从中创建变量?
提前谢谢!
答案 0 :(得分:1)
preg_match('|/t[0-9]{5}|', $url, $matches);
if (count($matches)) {
$t_number = $matches[0]; // "/t12345"
$number = substr($t_number, 2, strlen($t_number)); // 12345
}
假设:
1)引用网址永远不会有模式t #####。 (t12345.com/vote)
2)你总是有五位数。 (如果这改变了,你可以{5,6}来匹配5-6个实例
答案 1 :(得分:1)
柯蒂斯已经回答了,但这里有一个非正则表达式:
例如
$url = "http://subdomain.sample.com/t12345,action=vote";
$url_pieces = parse_url($url);
$path = str_replace("/","",$url_pieces["path"]);
$args = explode(',',$path);
t_number_thingy = $args[0];
编辑:添加str_replace,因为parse_url将在路径中包含斜杠。
答案 2 :(得分:0)
非正则表达式解决方案(不了解性能)并且可能有更好的方法,但它有效。
<?php
$var = "http://subdomain.sample.com/t12345,action=vote;";
$remove = "http://subdomain.sample.com/t";
$intCount = 5;
echo substr($var, strpos($var, $remove) + strlen($remove), $intCount);
?>
答案 3 :(得分:0)
您不需要在此使用正则表达式,您也可以使用str_replace();和basename();
<强>像:强>
<?php
$ref = "http://subdomain.sample.com/t12345,action=vote";
if(substr($ref,-4)==="vote"){
$ref = basename(str_replace(',action=vote','',$ref));
}
echo $ref; //t12345
?>
或者一个班轮:
$ref = (substr($ref,-4)==="vote") ? basename(str_replace(',action=vote','',$ref)) : "Unknown";