0

私は正規表現を使用して問題を解決するために戦った経験があまりありません:私は以下のようなURLを持っています:

http://example.com/ja-JP/blog/12345 _ _

上記の URL を以下の URL にリダイレクトしたい:

http://jp.example.com/ja/blog/12345 _ _ _ _

さらに、aws ALB リダイレクト ルールを使用してリダイレクトを実行したいと考えています。そして、異なる国とロケールのパターンで同じ URL リダイレクトを行う必要があります。たとえば、en-BZ、en-CA などです。

language-Country 部分をキャプチャしてソース URL を修正する方法を教えてください。

4

2 に答える 2

0

これは、言語と国を一致させるための正規表現です。

\/(?<lang>[a-z]{2})-(?<country>[A-Z]{2})\/  

ここに例があります

小文字の場合は [az]、2 つの小文字の場合は [az]{2}、(?<lang>[az]{2}) でグループ化し、「lang」と名前を付けてからダッシュ「-」を付けます。 2 つの大文字がグループ化されて「country」という名前が付けられ、2 つの「/」に含まれます。

あなたの開発言語がわからないので、それが PHP だとすると、次のようになります。

preg_match('/\/(?<lang>[a-z]{2})-(?<country>[A-Z]{2})\//' ,$url, $matches);
// $matches['lang']='ja' $matches['country']='JP'

$url = preg_replace('/\/(?<lang>[a-z]{2})-(?<country>[A-Z]{2})\//', '/'.$matches['lang'].'/', $url);
// $url = 'https://example.com/ja/blog/12345'

$url = preg_replace('/(https?:\/\/)/', '$1'.$matches['country'].'.', $url);
// $url = 'https://JP.example.com/ja/blog/12345'

(https?://) は、「http://」または「https://」に一致します。

于 2019-12-05T11:23:13.653 に答える