如何找出与正则表达式匹配的字符串

问题描述:

假设我有这个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

你有几个错误。

  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

    你非常接近,你需要添加一个“量词”。在你的情况下,一个'+'。

    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-9]后添加+任意大小的字符串,它看起来像这样:

    [0-9]+ 
    

    事情是这样的,现在它只会匹配一个数字。

    [0-9]将匹配单个数字

    [0-9]?将匹配0或1的数字

    [0-9]*将匹配0或多个数字

    [0-9]+将匹配1个或多个数字

    你也可以将[0-9]替换为\d的数字

    不要使用正则表达式解析XML使用一个真正的XML API,如SAX和DOM。 - 或者,如果适用,一些更高级别的API,它是不那么单调乏味使用。例如,如果您使用XML来序列化对象,则应查看JAXB

    试图用正则表达式来做它只是要求麻烦。请参阅相关的问题进行解答:

    Why is it such a bad idea to parse XML with regex?

    RegEx match open tags except XHTML self-contained tags