跟随隐身的链接,前面带有数字链

时间:2019-05-27 21:35:06

标签: php regex cloaking

我正在构建一个小的伪装链接脚本,但是我需要找到每个具有不同字符串号的字符串,例如('mylinkname1'-1597)。顺便说一句:数字始终是整数。

问题是我不知道字符串号,所以我当时想使用正则表达式,但是出现了问题。

这就是我现在得到的:

$pattern = '/-([0-9]+)/'; 

$v = $_GET['v']

if ($v == 'mylinkname1'.'-'.$pattern) {$link = 'http://example1.com/';}
if ($v == 'mylinkname2'.'-'.$pattern) {$link = 'http://example2.com/';}
if ($v == 'mylinkname3'.'-'.$pattern) {$link = 'http://example3.com/';}

header("Location: $link") ;
exit();

2 个答案:

答案 0 :(得分:1)

破折号已经在模式中,因此您不必在if子句中添加破折号。

您可以省略数字-[0-9]+周围的捕获组,并且必须将模式与preg_match一起使用。

您可以将if语句的格式更新为:

$pattern = '-[0-9]+';

if (preg_match("/mylinkname1$pattern/", $v)) {$link = 'http://example1.com/';}

为防止mylinkname1-1597成为较大单词的一部分,您可以用锚点^$包围模式,以断言字符串或单词边界{{1 }}

答案 1 :(得分:0)

这里完全不需要正则表达式,只需要在连字符上拆分字符串并仅匹配它,我还建议当您3或if \ eleses时使用case \ switch:

$v=explode('-',$_GET['v']);

switch ($v[0]) {
    case "mylinkname1":
        $link = 'http://example1.com/';
        break;
    case "mylinkname2":
        $link = 'http://example2.com/';
        break;
    case "mylinkname3":
        $link = 'http://example3.com/';
        break;
    default:
        echo "something not right";
}

header("Location: $link") ;
exit();