2

URI から 1 つのクエリ情報を取得するための Java 正規表現パターンを見つける手助けが必要です。たとえば、ここの URI は

"GET /6.2/calculateroute.xml?routeattributes=sm,wp,lg,bb&legattributes=mn&maneuverattributes=ac,po,tt,le,-rn,-sp,-di,no,nu,nr,sh&instructionFormat=html&language=en_US&mode=fastest;car;traffic:default&waypoint0=37.79548,-122.392025&waypoint1=36.0957717,-115.1745167&resolution=786&app_id=D4KnHBzGYyJtbM8lVfYX&token=TRKB7vnBguWLam5rdWshTA HTTP/1.1"

そこから 4 つの値を抽出する必要があります。

GET

/6.2/calculateroute.xml

routeattributes=sm,wp,lg,bb&legattributes=mn&maneuverattributes=ac,po,tt,le,-rn,-sp,-di,no,nu,nr,sh&instructionFormat=html&language=en_US&mode=fastest;car;traffic:default&waypoint0=37.79548,-122.392025&waypoint1=36.0957717,-115.1745167&resolution=786&app_id=D4KnHBzGYyJtbM8lVfYX&token=TRKB7vnBguWLam5rdWshTA

HTTP/1.1

問題は、クエリ文字列から app_id 値の正規表現を作成する方法です。app_id はすべてのパターンに表示されるわけではないことに注意してください。そのため、app_id が欠落している場合でも汎用的であり、正規表現は失敗しないはずです。助けてください...

4

1 に答える 1

2

あなたの質問は、「オプションのクエリ パラメータを文字列から抽出するにはどうすればよいですか」に単純化できます。方法は次のとおりです。

String appId = input.replaceAll("(.*(app_id=(\\w+)).*)|.*", "$3");

変数には、appId存在する場合は app_id 値が含まれ、それ以外の場合は空白になります。

ユーティリティ メソッドとしてバンドルされたコードを含むテスト コードを次に示します。

public static String getParameterValue(String input, String parameter) {
    return input.replaceAll("(.*("+parameter+"=(\\w+)).*)|.*", "$3"));
}

public static void main(String[] args) {
    String input1 = "foo=bar&app_id=D4KnHBzGYyJtbM8lVfYX&x=y";
    String input2 = "foo=bar&XXXXXX=D4KnHBzGYyJtbM8lVfYX&x=y";

    System.out.println("app_id1:" + getParameterValue(input1, "app_id"));
    System.out.println("app_id2:" + getParameterValue(input2, "app_id"));
}

出力:

app_id1:D4KnHBzGYyJtbM8lVfYX
app_id2:
于 2012-11-02T10:47:09.063 に答える