0

私はこのような受信データを持っています

http://localhost:1111/search?id=10&time=3200&type=abc
http://localhost:1111/search?time=3200&id=11&type=abc
http://localhost:1111/search?id=12
http://localhost:1111/search?id=13&time=3200&type=abc

データは変化していますが、完全にランダムまたは予測不可能なものではありません。

では基本的に、各文字列で着信する ID を抽出し、残りのジャンクを無視するにはどうすればよいでしょうか?

4

6 に答える 6

2

正規表現を使用して、最初のキャプチャ グループid=(\d+)の値を抽出できます。

String url = "http://localhost:1111/search?id=10&time=3200&type=abc";

Pattern id = Pattern.compile("id=(\\d+)");

Matcher m = id.matcher(url);
if (m.find())
    System.out.println(m.group(1));
10

Patternおよびを参照してくださいMatcher

于 2014-01-07T16:40:47.320 に答える
2

複数の ID が渡された場合 (有効な ID) はどうなりますか?

IMHO私はむしろこのように何かをしたいと思います:

URL url = new URL(<your link>);
String queryString = url.getQuery();

queryStringたとえば、マップに解析し、キー<String,List<String>>の値を取得しますID

于 2014-01-07T16:43:45.023 に答える
1

@ user1631616 の回答を拡張します。

サンプルコードは次のとおりです。

public static void main(String[] args) throws MalformedURLException {         
    URL aURL = new URL("http://localhost:1111/search?id=10&time=3200&type=abc");

    HashMap<String, String> params = new HashMap<>();
    String[] query = aURL.getQuery().split("&");
    for(String s: query) {
        String[] split = s.split("=");
        params.put(split[0],split[1]);
    }
    System.out.println(params.get("id")); 
    System.out.println(params.get("type")); 
    System.out.println(params.get("time")); 

}

そうすれば、HashMap パラメータがnullを返す場合、値がクエリ文字列に設定されていないことがわかります。

また、パラメータの順序についても心配する必要はありません。

于 2014-01-07T16:51:37.547 に答える
1

(?<=[?&])id=(\d+)(?=(?:\&|$))

Java および Perl フレーバーの Regex Buddy では機能しますが、Boost 正規表現エンジンを使用する TextPad では機能しません。Boost には後方参照に関する問題があります。

(?<=(?:
   [?&]    //PRECEDED BY a question-mark or ampersand
))          
   id=(\d+) //"id=[one-or-more-digits]"
(?=(?:
   \&|$     //FOLLOWED BY an ampersand or the end of the input
))

これにより、数字のみがキャプチャされ、次のような誤ったフィールドがキャプチャされるなどの問題が回避されます。

anotherid=123sometext
于 2014-01-07T16:42:29.467 に答える
0

このようなものは、あなたが望むことをするはずです:

(?<=id=)\d+

于 2014-01-07T16:44:23.957 に答える