JAVA:正则表达式

时间:2015-11-12 09:13:27

标签: java regex

无法找到为什么我的函数检测到目标文本中是否存在某个正则表达式的匹配项不适用于此示例:

正则表达式:

"(?s).*<name>.+</name>.*​"

目标文字:

<queryContextResponse>
  <contextResponseList>
    <contextElementResponse>
      <contextElement>
        <entityId type="Room" isPattern="false">
          <id>Room1</id>
        </entityId>
        <contextAttributeList>
          <contextAttribute>
            <name>pressure</name>
            <type>integer</type>
            <contextValue>720</contextValue>
          </contextAttribute>
          <contextAttribute>
            <name>temperature</name>
            <type>float</type>
            <contextValue>23</contextValue>
          </contextAttribute>
        </contextAttributeList>
      </contextElement>
      <statusCode>
        <code>200</code>
        <reasonPhrase>OK</reasonPhrase>
      </statusCode>
    </contextElementResponse>
  </contextResponseList>
</queryContextResponse>

功能

    private boolean isStringContainsReg(String reg, String text){
        try
        {
            Pattern pattern = Pattern.compile(reg);
            Matcher matcher = pattern.matcher(text);
            if (matcher.find()) {   
                return true;
            } 
        }
        catch(PatternSyntaxException e){            
            e.printStackTrace();            
        }
        return false;
    }

然而,当我在这个在线网站上测试时,它可以工作: http://java-regex-tester.appspot.com/

1 个答案:

答案 0 :(得分:0)

将模式更改为(?s).*?<name>.+</name>.*​?解决了问题 - 我只是将.*通配符替换为非贪婪的.*?。顺便说一下,方法String#matches(String regex)几乎完成了你的函数isStringContainsReg所做的...