2015-07-10 55 views
4

我想確定一個字符串是否至少包含一個使用String.match()函數的XML標記。由於項目設置的方式,我寧願如果我不需要使用PatternJava正則表達式檢查字符串是否包含XML標記

目前我使用這個表達式:

<[A-Za-z0-9]+> 

如果字符串這顯然只檢查包含文本左,右箭頭括號。我需要的是檢查是否字符串只是有一個單一的XML標記用正則表達式,如輸入喜歡的方式:

blah <abc foo="bar">blah</abc> blah 
blah <abc foo="bar"/> 

但不喜歡輸入:

blah <abc> blah 
blah <abc </abc> blah 

這可能嗎?

+0

使用查找功能,我認爲比賽意味着正則表達式必須整場比賽串。另外,你是什麼意思的XML _tag_?打開,關閉或其他形式? – sln

+0

@sln啊,我是在假設正則表達式也可以做部分匹配。我的意思是,無論如何,這並不重要。我只需要驗證是否至少有一個xml節點。 –

+0

但是封閉的_node_?這不是驗證。 – sln

回答

5

此:

if (input.matches("(?s).*(<(\\w+)[^>]*>.*</\\2>|<(\\w+)[^>]*/>).*")) 

匹配這兩種類型的標籤的(標準的和自閉合):

<abc foo="bar">blah</abc> 
<abc foo="bar"/> 

沒有匹配不完整的標籤,如:

<abc> 

regex live demo

+0

如果添加另一個反斜槓,則正則表達式正常工作。所以''而不是'' – bluelDe

+0

@bluelDe感謝您發現錯字:) – Bohemian

3

您可以使用:

if (input.matches("(?s).*?<(\\S+?)[^>]*>.*?</\\1>.*")) { 
    // String has a XML tag 
} 

(?s)DOTALL標誌,使DOT匹配換行也。

RegEx Demo

+1

如果元素具有屬性,則此正則表達式失敗。不清楚請求者尋找的XML有多複雜。 – user3745362

+0

謝謝,是的,我現在編輯它。 – anubhava

1

好吧,這個正則表達式將匹配大多數html/xml標籤。
可能只需要節點標籤,其餘的可以剝下。

只是節點標籤(最終剪輯) -

# "(?s)<(?:/?[\\w:]+\\s*|[\\w:]+(?:\".*?\"|'.*?'|[^>]*?)+)>" 

(?s) 
< 
(?: 
     /? 
     [\w:]+ 
     \s* 
    | 
     [\w:]+ 
     (?: " .*? " | ' .*? ' | [^>]*?)+ 
) 
> 

完全 -

Formatted:

# "<(?:(?:/?[\\w:]+\\s*/?)|(?:[\\w:]+\\s+(?:(?:(?:\"[\\S\\s]*?\")|(?:'[\\S\\s]*?'))|(?:[^>]*?))+\\s*/?)|\\?[\\S\\s]*?\\?|(?:!(?:(?:DOCTYPE[\\S\\s]*?)|(?:\\[CDATA\\[[\\S\\s]*?\\]\\])|(?:--[\\S\\s]*?--)|(?:ATTLIST[\\S\\s]*?)|(?:ENTITY[\\S\\s]*?)|(?:ELEMENT[\\S\\s]*?))))>" 

< 
(?: 
     (?: 
      /? 
      [\w:]+ 
      \s* 
      /? 
    ) 
    | 
     (?: 
      [\w:]+ 
      \s+ 
      (?: 
       (?: 
        (?: " [\S\s]*? ") 
        | (?: ' [\S\s]*? ') 
       ) 
      | (?: [^>]*?) 
      )+ 
      \s* 
      /? 
    ) 
    | 
     \? 
     [\S\s]*? 
     \? 
    | 
     (?: 
      ! 
      (?: 
       (?: 
        DOCTYPE 
        [\S\s]*? 
       ) 
      | (?: 
        \[CDATA\[ 
        [\S\s]*? 
        \]\] 
       ) 
      | (?: 
        -- 
        [\S\s]*? 
        -- 
       ) 
      | (?: 
        ATTLIST 
        [\S\s]*? 
       ) 
      | (?: 
        ENTITY 
        [\S\s]*? 
       ) 
      | (?: 
        ELEMENT 
        [\S\s]*? 
       ) 
      ) 
    ) 
) 
> 
相關問題