0

私は小さなクローキング リンク スクリプトを作成していますが、たとえば ( '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();
4

2 に答える 2

1

ダッシュは既にパターンに含まれているため、if 句に追加する必要はありません。

数字の周りのキャプチャ グループを省略できます。また、 preg_match-[0-9]+でパターンを使用する必要があります。

if ステートメントの形式を次のように更新できます。

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

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

大きな単語の一部にならないmylinkname1-1597ようにするには、パターンをアンカーで囲み、^文字$列または単語の境界の開始と終了をアサートします。\b

于 2019-05-27T21:51:49.013 に答える
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();
于 2019-05-27T21:51:30.250 に答える