1

国コードなどの URL の拡張子を取得するための正規表現が必要です...

たとえば、次のように、3 つの国で異なるドメイン拡張子を持つ 3 つのサイトがあります。

http://www.domain.com
domain.de/
domain.co.uk

上記の文字列の URL 拡張子を取得する正規表現が必要です。「com」、「de」、「uk」のいずれかを返す

ドメインは、末尾にスラッシュがある場合とない場合がある別の文字列である可能性があることに注意してください。

したがって、完璧な正規表現は、次の文字列から de を引き出すことができます。

"domain.de" or "http://www.domain.de" or "www.domain.de/"

私が最も近いのは、次を使用することです。

\w*$

残念ながら、これは末尾のスラッシュでは機能しません。

4

3 に答える 3

2

追加した例でのみ正規表現が機能する必要がある場合は、非常に簡単です。

\.([a-z]{2,3})\/?$

これは、あなたが私たちに与えたすべてのタイプの入力から国を取得します:

http://www.domain.com
domain.de
http://www.domain.de
www.domain.de/

国コードはキャプチャ グループ 1 にあります。

于 2012-05-30T19:59:43.040 に答える
2

HTTP と HTTPS に制限すると、次を使用できます。

/^(https?:\/\/)?([^@\/]+@)?[a-z0-9.]+\.([a-z]{2,4})(:[0-9]+)?\/?$/
                                      ^^^^^^^^^^^^

TLD は $3 にあります。

$ php -r '$t="example.ca"; preg_match("/^(https?:\/\/)?([^@\/]+@)?[a-z0-9.]+\.([a-z]{2,4})(:[0-9]+)?\/?$/", $t, $m); print $m[3]."\n";'
ca
$ php -r '$t="http://user:password@www.example.ca/"; preg_match("/^(https?:\/\/)?([^@\/]+@)?[a-z0-9.]+\.([a-z]{2,4})(:[0-9]+)?\/?$/", $t, $m); print $m[3]."\n";'
ca
于 2012-05-30T19:57:29.507 に答える
0

すでに持っているものを使用して、末尾のスラッシュを考慮して簡単に調整できます

\w*[/]?$
于 2012-05-30T19:59:19.053 に答える