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