簡體   English   中英

Java Regex用於XML的請求URL

[英]Java Regex for a requested URL with XML

我知道有很多與此主題相關的問題是正則表達式,但我一直在嘗試填寫URL的要求。 URL如下:

POST /fr.synomia.search.ws.module.ModuleSearch/geResults/jsonp?xmlQuery=<?xml version='1.0' encoding='UTF-8'?><query ids="16914"><matchWord>avoir</matchWord><fullText><![CDATA[]]></fullText><quotedText><![CDATA[]]></quotedText><sensitivity></sensitivity><operator>AND</operator><offsetCooc>0</offsetCooc><cooc></cooc><collection>0</collection><searchOn>all</searchOn><nbResultDisplay>10</nbResultDisplay><nbResultatsParAspect>5</nbResultatsParAspect><nbCoocDisplay>8</nbCoocDisplay><offsetDisplay>0</offsetDisplay><sortBy>date</sortBy><dateAfter>0</dateAfter><dateBefore>0</dateBefore><ipClient>82.122.169.244</ipClient><typeQuery>0</typeQuery><equivToDelete></equivToDelete><allCooc>false</allCooc><versionDTD>3.0.5</versionDTD><r34>1tcbet30]</r34><mi>IND</mi></query>&callback=__gwt_jsonp__.P1.onSuccess&failureCallback=__gwt_jsonp__.P1.onFailure HTTP/1.1

它是一個REST WS請求的URL,在這個url的結構中,我們可以找到一個標簽: <query ids="16914">

我想從整個URL中提取該數字16914,我試圖實現的正則表達式如下:

private static Pattern p = Pattern.compile(
"<\\?xml version='1.0' encoding='[^']+'\\?><query ids=\"([0-9]+)\"><matchWord>.*");

我嘗試使用一些像Debuggex這樣的工具但是我無法找到可能存在的問題,我更喜歡使用正則表達式而不是使用String類中的許多方法。

我真的很感激任何幫助。 非常感謝提前。

我為此目的使用SAX:

public class XMLParser extends DefaultHandler {
   int id;
   public void startElement(String ns, String qName, String localName, Attributes attrs) throws SAXException {
     if (qName.equals("query")) { 
        id = Integer.parseInt(attrs.getValue("id"));
     }
   }
   public String toString() { 
     return String.format("%d", this.id); 
   }
   public static void main(String[] args) throws Exception {
     SAXParserFactory factory = SAXParserFactory.newInstance();
     SAXParser parser = factory.newSAXParser();
     XMLParser parserObj = new XMLParser();
     parser.parse(new FileReader(args[0], parserObj);
     System.out.println(parserObj);
  }
}

你的正則表達式沒有任何問題,它對我有用。

String s = "POST /fr.synomia.search.ws.module.ModuleSearch/geResults/jsonp?xmlQuery=<?xml version='1.0' encoding='UTF-8'?><query ids=\"16914\"><matchWord>avoir</matchWord><fullText><![CDATA[]]></fullText><quotedText><![CDATA[]]></quotedText><sensitivity></sensitivity><operator>AND</operator><offsetCooc>0</offsetCooc><cooc></cooc><collection>0</collection><searchOn>all</searchOn><nbResultDisplay>10</nbResultDisplay><nbResultatsParAspect>5</nbResultatsParAspect><nbCoocDisplay>8</nbCoocDisplay><offsetDisplay>0</offsetDisplay><sortBy>date</sortBy><dateAfter>0</dateAfter><dateBefore>0</dateBefore><ipClient>82.122.169.244</ipClient><typeQuery>0</typeQuery><equivToDelete></equivToDelete><allCooc>false</allCooc><versionDTD>3.0.5</versionDTD><r34>1tcbet30]</r34><mi>IND</mi></query>&callback=__gwt_jsonp__.P1.onSuccess&failureCallback=__gwt_jsonp__.P1.onFailure HTTP/1.1";
Pattern p = Pattern.compile(
            "<\\?xml version='1.0' encoding='[^']+'\\?><query ids=\"([0-9]+)\"><matchWord>.*");

Matcher m = p.matcher(s);

if (m.find()) {
    System.out.println("Group: "+m.group(1));
}

打印:

Group: 16914

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM