サポート » 使い方全般 » get_home_urlの一部だけ欲しい

  • 解決済 cacaocaocaca

    (@cacaocaocaca)


    PHPで次の正規表現を使おうとしています。

    $arr=array(
    '/^https?:\/\/example.com\/a\/[^\/]*$/'
    ,'/^https?:\/\/example.com\/b\/[^\/]*$/'
    );

    そのため「example.com」の部分だけを取得できる方法を探しています。
    次のようにしたいためです。

    $base_url = get_xxx(); // 「example.com」の部分だけを取得
    $arr=array(
    "/^https?:\/\/$base_url\/a\/[^\/]*$/"
    ,"/^https?:\/\/$base_url\/b\/[^\/]*$/"
    );

    関数としてはget_home_url()など似たものは見つけたのですが、ぴったりこれといったものに出会えません。
    こういったときにはどうすればいいかご教示いただけませんでしょうか。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • こんにちは

    URLの正規表現は以下のRFCに規定されていますので、参考にしてみてください。

    RFC3986 付録 B. 正規表現による URI 参照の解析

    トピック投稿者 cacaocaocaca

    (@cacaocaocaca)

    ありがとうございます。むずかしすぎました汗

    たとえば

    $pattern = '{^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?}';
    $url = 'https://example.com/a/support/topic/';
    $result = preg_match( $pattern, $url, $matches );
    
    var_dump($matches);

    の結果は

    array(6) {
      [0]=>
      string(36) "https://example.com/a/support/topic/"
      [1]=>
      string(6) "https:"
      [2]=>
      string(5) "https"
      [3]=>
      string(13) "//example.com"
      [4]=>
      string(11) "example.com"
      [5]=>
      string(17) "/a/support/topic/"
    }

    となります。
    get_xxx関数では、4番目だけ返すようにしたらいいんじゃないかと思います。

    • この返信は3年、 10ヶ月前にmunyaguが編集しました。
    トピック投稿者 cacaocaocaca

    (@cacaocaocaca)

    なるほど、そういうお考えでしたか。大変ためになりました。WordPressの関数はないけれど、get_home_urlによって得られる値から、自分でget_xxxという関数を作り目的のものを抽出するのですね。具体的な方法までどうもありがとうございます。

    パターンのデリミタの閉じる方が}ではなく{じゃないと動かないかもしれません。
    動かしたときはデリミタをバッククォートでやったんですけど、それだとここに貼り付けられないので、貼り付けるときに変更したので習慣で閉じる方にしてしまいました。

    トピック投稿者 cacaocaocaca

    (@cacaocaocaca)

    ありがとうございます。普通にそのまま{}というデリミタでできるようです。
    実行サンプル:https://3v4l.org/nnt0M

    しかしデリミタというのを知りませんでしたので調べてみたところ、多くの場合に
    //
    @@など
    が使われるようで、これらはいずれも同じものを前後に使っていますよね。

    しかしどうして
    {}という前後が異なるものがデリミタとして使えるのか?

    この点は疑問ですね…

    • この返信は3年、 10ヶ月前にcacaocaocacaが編集しました。

    試していただいてありがとうございます。

    調べてみると、角括弧形式のデリミタという仕様があるようですね

    https://www.php.net/manual/ja/regexp.reference.delimiters.php

    • この返信は3年、 10ヶ月前にmunyaguが編集しました。
    トピック投稿者 cacaocaocaca

    (@cacaocaocaca)

    なるほど、括弧の場合はそれでいいのですね。どうもありがとうございました。頂いたコードはありがたく使わせて頂きます。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「get_home_urlの一部だけ欲しい」には新たに返信することはできません。