Я создаю небольшой скрипт для маскировки, но мне нужно найти каждый из них с различным номером строки, например ('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 ответа
Тире уже в шаблоне, поэтому вам не нужно добавлять его в предложении if.
Вы можете опустить группу захвата вокруг цифр -[0-9]+
и использовать шаблон с preg_match.
Вы можете обновить формат операторов if:
$pattern = '-[0-9]+';
if (preg_match("/mylinkname1$pattern/", $v)) {$link = 'http://example1.com/';}
Чтобы mylinkname1-1597
не являлся частью более крупного слова, вы можете окружить шаблон якорями ^
и $
, чтобы утверждать начало и конец строки или границ слова \b
Здесь вообще нет необходимости в регулярных выражениях, просто разбейте строку на дефис и только сопоставьте ее, также я рекомендую регистр \ 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();
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.