3

URL の例 = http://www.example.com/aa/bb/cc/dd?q=ab&c=1

したがって、この URL では、最後のスラッシュの後、疑問符の前にある値 dd が必要です

そのための正規表現の書き方

最後のスラッシュの後に値を取得するように書きましたが、クエリ文字列の前に値「dd」のみを取得する方法がわかりませんでした。

正規表現: [^/]+$

4

3 に答える 3

5

以下の正規表現を使用できます。この正規表現は、後に続くすべてのアルファベットに一致します?。あなたの場合は になります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 ?
于 2012-07-06T07:25:51.483 に答える
3

これは機能します。技術的には、「/」と「?」の間にあるものは何でも取得します。「/」をエスケープする必要があるかもしれませんが、エスケープされていないので、エスケープせずに残しました。

/([^/\?]+)\?

于 2012-07-06T06:51:18.740 に答える
1
#(.*)/(.*)\?(.*)#

使用している言語がわからないので、これは 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)

ご覧のとおり、正規表現が機能します。

于 2012-07-06T06:55:21.653 に答える