1

私が配列を持っているとしましょう:

[test1] = '/'
[test2] = '/foo'
[test3] = '/foo/*'
[test4] = '/bar/*'
[test5] = '/baz/*/bar'

これらを変換する必要がある有効な grep ルールは何ですかpreg_match。これは、次の入力が返されるように、入力に対して関数を (パターンとしてルールを使用して) 実行することを満たすものです。のように、ルールは何にカプセル化する必要があり、*s は何に置き換える必要がありますか?

input          :   returned
/              :   test1
/foo           :   test2
/foo/bar       :   test3
/foobar        :   none
/bar           :   test4
/bar/foo       :   test4
/barfoo        :   none
/baz/foo/bar   :   test5
/baz//bar      :   none
4

3 に答える 3

1

最後に、私はこれを行いました:

<?php
$urlRule = str_replace('/', '\/', $urlRule);
$urlRule = '/^('.str_replace('*', ')(.*)(', $urlRule).')$/';

if (count(preg_grep($urlRule, array($url))) > 0) { ...

各ルールについてですが、含める必要がありました

[test4] = '/bar'

達成するために

input          :   returned
/bar           :   test4
于 2012-08-10T18:56:36.277 に答える
1

と置換する:

[^/]+

これは、非スラッシュ文字の空でない文字列を意味します。最後の例に基づいて仮定しています(/baz//bar「なし」を返します)。

もちろん、必要に応じてスラッシュをエスケープします。

于 2012-08-10T18:15:40.667 に答える
1

文字列から抽出する方が良いpathと思います:filename

^(\/(?:[^\\/:*?"<>|]+\/)*)([^\\/:*?"<>|]+)*$

グループ 1:path
グループ 2:filename

これらの情報を使用してテーブルの検索を行います (例: ハッシュ配列)

于 2012-08-10T18:25:10.517 に答える