1

私が欲しいのは、ドメインが文字列に存在するかどうかです。

例は私の問題です

+----------------------------------------------+-----------------------+
| input                                        | output                |
+----------------------------------------------+-----------------------+
| http://www.example.com/questions/ask         | match or true         |
| http://example.com/check                     | match or true         |
| http://www.google.com/ig/moduleurl           |
|    =http%3A%2F%2Fwww.example.com%2Fquestion  | false                 |
| http://example.com/search/%25C3%25A9t%25     | match true            |
+----------------------------------------------+-----------------------+

どんな助けもかなりのものです

ありがとう

4

3 に答える 3

4

ここで正規表現は必要ありません IMO:

parse_url() ここで check manを使用すると、ドメイン、ホストなど、本当に必要なものをすべて取得できます。(非常に高速な)文字列関数と組み合わせると、次のようになります。

if (strstr(parse_url($input,PHP_URL_HOST),'example.com'))
{
    echo $input.' is a match';
}

しかし、シナリオで最も速い方法は次のとおりです。

$match = strpos($input, 'example.com');
$match = $match !== false && $match <= 12 ? true : false;
//12 is max for https://www.example.com

さえ必要ありませんが、それはブール値が割り当てられている!!(...);ことを確認できるようにするためです$match

しかし、私の目には、最初の提案の方がすっきりしていて読みやすいように見えます。

探しているホストで始まる文字列が有効でない場合:

$match = strpos($input, 'example.com');
$match = !!($match && $match < 13);

私が考えることができる最速のアプローチです

于 2013-07-19T11:43:07.403 に答える
2

このパターンを使用してそれを行うことができます:

$pattern = '~^(?:ht|f)tps?://[^/]*?(?<=\.|/)'.preg_quote($domain).'(?=/|$)~i';
于 2013-07-19T11:44:00.370 に答える
0

URL 全体を解析するよりも、parse_url 関数を使用することをお勧めします。

$arr = parse_url($url);
$host = $arr['host'];

// now just match the hostname
if (preg_match('#^(?:[^.]+\.)*example\.com$#i', $host, $arr))
    var_dump($arr); // or return true;

この正規表現も機能する場合があります。

if (preg_match('#^https?://(?:[^.]+\.)*example\.com/#i', $url, $arr))
   var_dump($arr); // return true;
于 2013-07-19T11:45:07.783 に答える