创建Java正则表达式模式以匹配XML中的字符串

创建Java正则表达式模式以匹配XML中的字符串,java,regex,xml,Java,Regex,Xml,我试图创建正则表达式模式来匹配XML文本中的字符串。例如: 要匹配的字符串:PLP não seráfechada XML文本: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap:Fault> <faultcode>soap:Server</faultcode&

我试图创建正则表达式模式来匹配XML文本中的字符串。例如:

要匹配的字符串:PLP não seráfechada

XML文本:

<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Server</faultcode>
            <faultstring>A PLP não será fechada, o(s) objeto(s) [PX44258394BR, PX44258388BR, PX44258382BR] já estão vinculados em outra PLP!</faultstring>
            <detail>
                <ns2:SigepClienteException
                    xmlns:ns2="http://cliente.bean.master.sigep.bsb.correios.com.br/">A PLP não será fechada, o(s) objeto(s) [PX44258394BR, PX44258388BR, PX44258382BR] já estão vinculados em outra PLP!
                </ns2:SigepClienteException>
            </detail>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>
true

请帮助。

您只需使用
字符串即可完成。包含

class Main {
    public static void main(String[] args) {
        String xml="<soap:Envelope\n" + 
                "    xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + 
                "    <soap:Body>\n" + 
                "        <soap:Fault>\n" + 
                "            <faultcode>soap:Server</faultcode>\n" + 
                "            <faultstring>A PLP não será fechada, o(s) objeto(s) [PX44258394BR, PX44258388BR, PX44258382BR] já estão vinculados em outra PLP!</faultstring>\n" + 
                "            <detail>\n" + 
                "                <ns2:SigepClienteException\n" + 
                "                    xmlns:ns2=\"http://cliente.bean.master.sigep.bsb.correios.com.br/\">A PLP não será fechada, o(s) objeto(s) [PX44258394BR, PX44258388BR, PX44258382BR] já estão vinculados em outra PLP!\n" + 
                "                </ns2:SigepClienteException>\n" + 
                "            </detail>\n" + 
                "        </soap:Fault>\n" + 
                "    </soap:Body>\n" + 
                "</soap:Envelope>";
        String searchStr="A PLP não será fechada";
        System.out.println(xml.contains(searchStr));
    }
}

几乎不可能制作一个能够在X/HTML中正确查找内容的正则表达式。为此,您确实需要一个解析器。Java有一个内置的,你应该使用它,“在一个字符串对象中”和什么有什么关系?解析器可以很好地读取字符串。这就是为什么不能使用regex解析HTML/XML:用外行术语的正式解释不是这个问题的重复。这不是一个真正的问题,这是一篇基于观点的论文,不应该用来隐藏html/XML或任何SGML的正则表达式解析。如果这是真的,那么超过100000个问题也需要隐藏起来@t尽管复制品的合适性仍有争议,但你的问题中并不清楚你到底想要发生什么。请澄清你想做什么。例如,对于正则表达式,您需要知道要匹配的内容,但也需要知道要拒绝的内容。您还需要准确地指定您真正想要匹配的XML的哪一部分,以及一旦匹配完成,您将如何处理匹配。现在,如果包含您感兴趣的字符串,那么您似乎正在匹配整个XML内容。这样做只会告诉您字符串是否存在,直接搜索静态字符串比使用正则表达式更有效。
true