Я создаю небольшой скрипт для маскировки, но мне нужно найти каждый из них с различным номером строки, например ('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();
0
bpy 28 Май 2019 в 00:35

2 ответа

Лучший ответ

Тире уже в шаблоне, поэтому вам не нужно добавлять его в предложении if.

Вы можете опустить группу захвата вокруг цифр -[0-9]+ и использовать шаблон с preg_match.

Вы можете обновить формат операторов if:

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

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

Чтобы mylinkname1-1597 не являлся частью более крупного слова, вы можете окружить шаблон якорями ^ и $, чтобы утверждать начало и конец строки или границ слова \b

1
The fourth bird 27 Май 2019 в 21:59

Здесь вообще нет необходимости в регулярных выражениях, просто разбейте строку на дефис и только сопоставьте ее, также я рекомендую регистр \ switch, когда вы 3 или if \ eleses:

$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();
0
user10051234user10051234 27 Май 2019 в 21:51