2013-05-07 109 views
0

假設我有這個java字符串。請注意,有兩個<c></c>對,一個只包含數字,另一個包含數字和字符串。 如何知道一個字符串是否包含<c></c>只有Java中的數字? 我做到了這一點,但沒有奏效。如何找出與正則表達式匹配的字符串

String keyPattern = "^<id>[0-9]</id>$"; 
    boolean hasKey = str.matches(keyPattern); 

<start><a></a><b></b><c>addf123</c><d><d><c>1234</c><foo></foo><bar></bar></start> 
+1

在一般意義上,你真的應該用XML解析器解析正確的數據。使用正則表達式解析不是正確的做法。 – rolfl 2013-05-07 22:27:56

+1

請不要使用正則表達式來解析XML。請參閱http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2013-05-07 22:34:36

回答

0

你有幾個錯誤。

  1. 你沒有標籤 「< ID>」 或 「</ID>」 你的字符串裏面,你 有 「</C>」。
  2. 特殊字符「^」表示它必須匹配從字符串的開頭。 「$」表示它必須匹配到字符串的結尾。因此,在這種情況下,您希望匹配所有內容,直到「< c>數字</c>」,然後匹配其餘部分。 「。*」會將所有內容匹配到所需的位置,然後搜索數字,然後使用「匹配」字符串的其餘部分。* [0-9] +‘符號

修訂比賽的作品‘你需要尋找1或更多,這與done’,」

  • 您只用一個手指與搜索’。

    String keyPattern = ".*<c>[0-9]+</c>.*"; 
    boolean hasKey = str.matches(keyPattern); 
    
  • +0

    非常感謝!有效 – codereviewanskquestions 2013-05-07 22:28:38

    0

    你非常接近,你需要添加一個「量詞」。在你的情況下,一個'+'。

    String keyPattern = "^<id>[0-9]+</id>$"; 
    

    鏈接到JavaDoc for Pattern

    編輯:但是,你也只是要成功匹配字符串,其中在字符串中"<id>123</id>",並沒有其他的文本,因爲你的^和$錨。

    所以,如果你刪除這些,你必須:

    String keyPattern = ".*<id>[0-9]+</id>.*"; 
    

    將匹配其中包含的數只...標籤隨時隨地任何字符串。

    我懷疑你想獲得所有唯一的編號,編號的,在這種情況下,匹配(...)方法是不是你想要使用一個....但是這是一個不同的問題。

    +0

    當使用str.matches時,此keyPattern將不匹配字符串 – greedybuddha 2013-05-07 22:29:22

    +0

    @greedybuddha謝謝,腦屁 – rolfl 2013-05-07 22:31:16

    +0

    沒問題,我看你已經把它解決了! – greedybuddha 2013-05-07 22:35:10

    0

    如果你想匹配可以包含一個數字,你需要的[0-9]後添加+任意大小的字符串,它看起來像這樣:

    [0-9]+ 
    

    事情是這樣的,現在它只會匹配一個數字。

    -1

    [0-9]將匹配單個數字

    [0-9]?將匹配0或1的數字

    [0-9]*將匹配0或多個數字

    [0-9]+將匹配1個或多個數字

    你也可以將[0-9]替換爲\d的數字

    相關問題