从引用URL的一部分创建php变量

时间:2013-06-16 00:41:36

标签: php regex

我正在尝试编写一个脚本来记录留言板上的民意调票中的IP,只有在我们的某个民意调查中投票时才会触发。编辑:我是通过网络信标做的,因为我无法访问民意调查的编程。 /编辑

当脚本启动时,它需要知道正在投票的投票,因为通常会同时打开多个投票,并将选民的IP记录在专用于该投票的平面文件中

首先,我抓住引用网址,其格式如下:

http://subdomain.sample.com/t12345,action=vote

如果在引用URL中找到'vote',我接下来要做的就是抓住t#并将其转换为变量,这样我就可以在一个名为t12345.txt或12345.txt的文件中记录信息,只要它与民意调查的主题编号相匹配,或者也不重要。

/ t之后的数字是唯一应该在此URL中更改的内容。这里目前有5位数字,我预计不会很快改变。

我的问题是:如何从网址中获取此t#并从中创建变量?

提前谢谢!

4 个答案:

答案 0 :(得分:1)

查看preg_match

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)

柯蒂斯已经回答了,但这里有一个非正则表达式:

  1. 在网址上使用parse_url获取“路径”。
  2. 使用带有逗号分隔符的explode将结果中的t#作为数组元素0。
  3. (可选)对2的结果的元素1使用explode,其分隔符为=,以获取元素0中的“action”和此新结果的元素1中的“vote”。
  4. 例如

    $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);

?>

phpFiddle

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