0

基本的に、存在する場合と存在しない場合がある数字に遭遇するまで、URLを抽出しようとしています

例:

http://www.test.com/products/cards/product_code/12345/something_else
http://www.test.com/products/cards/product_code2/

望ましい出力 -

http://www.test.com/products/cards/product_code/
http://www.test.com/products/cards/product_code2/

追加情報 - この質問に似た言語に依存しない正規表現 URL の一部を取得する (正規表現)

どうもありがとう

4

3 に答える 3

1

これは正規表現の仕事ではないかもしれませんが、選択した言語の既存のツールの仕事です。 どの言語を使用していますか?おそらく正規表現を使用するのではなく、すでに作成、テスト、およびデバッグされている既存のモジュールを使用する必要があります。

PHPを使用している場合は、このparse_url関数が必要です。

Perlを使用している場合は、URIモジュールが必要です。

Rubyを使用している場合は、URIモジュールを使用してください。

于 2013-03-13T16:12:32.007 に答える
0

これを行う簡単な正規表現の方法を次に示します。

<?php

$url = "http://www.test.com/products/cards/product_code/1234";
$pattern = '/\/[0-9]/';

preg_match($pattern, $url, $matches);

if (count($matches) > 0) {
    echo substr($url, 0, strpos($url,$matches[0])+1);
} else {
    echo $url;
}
?>
于 2013-03-13T16:20:41.153 に答える
0

使用sed:

sed 's#\(http://.*/\)[0-9]\+.*#\1#'

つまり:

  • http://スラッシュが前に付いている最初に遭遇した数字まで (含まない) で始まる任意の文字をキャプチャします。\(http://.*/\)[0-9]\+
  • 行末まで任意の文字に一致し続けます:.*$
  • これらを以前にキャプチャしたものに置き換えます。\1

クラシックの代わりにセパレーター#として選択しました。そうしないと、正規表現でこれらの文字をエスケープする必要があるためです。sed/

于 2013-03-13T16:21:32.650 に答える