URL の例 = http://www.example.com/aa/bb/cc/dd?q=ab&c=1
したがって、この URL では、最後のスラッシュの後、疑問符の前にある値 dd が必要です
そのための正規表現の書き方
最後のスラッシュの後に値を取得するように書きましたが、クエリ文字列の前に値「dd」のみを取得する方法がわかりませんでした。
正規表現: [^/]+$
URL の例 = http://www.example.com/aa/bb/cc/dd?q=ab&c=1
したがって、この URL では、最後のスラッシュの後、疑問符の前にある値 dd が必要です
そのための正規表現の書き方
最後のスラッシュの後に値を取得するように書きましたが、クエリ文字列の前に値「dd」のみを取得する方法がわかりませんでした。
正規表現: [^/]+$
以下の正規表現を使用できます。この正規表現は、後に続くすべてのアルファベットに一致します?
。あなたの場合は になりますdd
。
EDIT\w
:アルファベットの代わりに使用する正規表現を更新しました。
[^\/][\w]+(?=\?)
説明
[^\/] -- Do not match /
[\w]+ -- match word characters (letters, digits, underscore)
(?=\?) -- Positive lookahead: Match alphabets(above condition) that are followed by a ?
これは機能します。技術的には、「/」と「?」の間にあるものは何でも取得します。「/」をエスケープする必要があるかもしれませんが、エスケープされていないので、エスケープせずに残しました。
/([^/\?]+)\?
#(.*)/(.*)\?(.*)#
使用している言語がわからないので、これは PHP で動作するように作成しました。特に使用している言語に適応することは難しくありません。
正規表現の内訳:
#
- 正規表現の開始記号と終了記号。(.*)/
- URLの finalより前のものと一致します。/
(.*)\?
- final/
と の前にあるものと一致し?
ます。(.*)#
続くものと一致します。?
もちろん、正規表現はさらに短くすることもできますが、必要に応じて、取得した URL の他の詳細を使用することもできます。
編集
あなたが与えたURLの例で、このコードを使用しました:
<?php
$url = "http://www.abc.com/aa/bb/cc/dd?q=ab&c=1";
$regex = "#(.*)/(.*)\?(.*)#";
preg_match_all($regex, $url, $matches);
var_dump($matches);
?>
これが返されたものです:
array
0 =>
array
0 => string 'http://www.abc.com/aa/bb/cc/dd?q=ab&c=1' (length=39)
1 =>
array
0 => string 'http://www.abc.com/aa/bb/cc' (length=27)
2 =>
array
0 => string 'dd' (length=2)
3 =>
array
0 => string 'q=ab&c=1' (length=8)
ご覧のとおり、正規表現が機能します。