2017-10-12 16 views
3

として私は、URLPHPのするpreg_match使用してURLを正規表現

私が唯一のものはで終わるフィルタのための正規表現を記述する必要が
[ 
    'http://www.example.com/eng-gb/products/test-1', 
    'http://www.example.com/eng-gb/products/test-3', 
    'http://www.example.com/eng-gb/about-us', 
] 

の配列を持っています'私たちに関しては'。

'http://www.example.com/eng-gb/products/(.*)'も正規表現として使用する必要があります。

アーカイブに最適な方法は?私はあなたが原因preg_grepを使用する必要があると思う

答えて

1

preg_grep()は、コードの短いラインを提供していますが、一致する部分文字列がそれに任意の変数の文字を持っているように見えていないため、ベストプラクティスはstrpos()がより適していることを示すでしょう。

コード:(Demo

$urls=[ 
    'http://www.example.com/eng-gb/products/test-1', 
    'http://www.example.com/eng-gb/badproducts/test-2', 
    'http://www.example.com/eng-gb/products/test-3', 
    'http://www.example.com/eng-gb/badproducts/products/test-4', 
    'http://www.example.com/products/test-5', 
    'http://www.example.com/eng-gb/about-us', 
]; 

var_export(preg_grep('~^http://www.example\.com/eng-gb/products/[^/]*$~',$urls)); 
echo "\n\n"; 
var_export(array_filter($urls,function($v){return strpos($v,'http://www.example.com/eng-gb/products/')===0;})); 

が出力:

array (
    0 => 'http://www.example.com/eng-gb/products/test-1', 
    2 => 'http://www.example.com/eng-gb/products/test-3', 
) 

array (
    0 => 'http://www.example.com/eng-gb/products/test-1', 
    2 => 'http://www.example.com/eng-gb/products/test-3', 
) 

いくつかの注意:

preg_grep()を使用する:

  • ように、非スラッシュパターンの区切り文字を使用しますあなたがやるパターン内のすべてのスラッシュをエスケープする必要はありません。
  • .comの点をエスケープします。
  • 最も厳密な検証のために、開始アンカーと終了アンカーで完全なドメインとディレクトリパスを記述します。
  • パターンの最後の近くにネゲートされた文字クラスを使用して、追加のディレクトリが追加されないようにします(もちろん、すべてのサブディレクトリを含める場合を除きます)。
  • 私のパターンは、/products/で終わるURLと一致しますが、/productsでは一致しません。これはあなたの質問の詳細に従います。strpos()使用

  • strpos()===0の確認は、サブ文字列の開始時に見つけなければならないことを意味しています。
  • これは、文字列の末尾に後続の文字を許可します。
0

は、URL の配列を持っており、これは

$matches = preg_grep('/products\/.*$/', $urls);

あなたの条件に一致するURLの配列を返しますし、また、あなたがたURL

を検証するためにPHPで validate filtersを使用することができます
0

http:\/\/www\.example\.com\/eng-gb\/products\/(.*)を取得するには、スラッシュとピリオドをエスケープする必要があります。その後、URLを直接入力するだけです。

\/eng-gb\/products\/(.*)を検索することをお勧めします。

例:

$matches = array(); 
preg_match('/\/eng-gb\/products\/(.*)/', $your_url, $matches); 
$product = $matches[1]; 
関連する問題