Java 将包含无效字符的XML标记与正则表达式匹配

Java 将包含无效字符的XML标记与正则表达式匹配,java,xml,regex,Java,Xml,Regex,我有一个java程序,它将xml作为输入,并使用正则表达式检查标记中允许的字符列表,并且应该返回一个完整的标记,该标记包含除允许的字符以外的其他字符,如特殊字符 XMl输入 <?xml version="1.0"?> <PayLoad> <requestRows>****</requestRows> <requestRowLength>1272</requestRowLength> <exceptionTimestam

我有一个java程序,它将xml作为输入,并使用正则表达式检查标记中允许的字符列表,并且应该返回一个完整的标记,该标记包含除允许的字符以外的其他字符,如特殊字符

XMl输入

<?xml version="1.0"?>
<PayLoad>
<requestRows>****</requestRows>
<requestRowLength>1272</requestRowLength>
<exceptionTimestamp>2012070202281068-0700</exceptionTimestamp>
<exceptionTimestamp>201$2070202281068-0700</exceptionTimestamp>
<exceptionTimestamp>20120(702022810680700</exceptionTimestamp>
<exceptionDetail>NO DATA AVAILABLE FOR TIME PERIOD SPECIFIED   =</exceptionDetail>
</PayLoad>

****
1272
2012070202281068-0700
201$2070202281068-0700
20120(702022810680700
没有指定时间段的可用数据=
允许字符表

\! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
\!“$%&'()*+,-/0123456789:;<=>?@abcdeefgiklm N O P Q R S tuv W X Y Z[\]^ abcde fgiklm N O P Q R S tuv W X Y Z{~
我试过下面的方法

public static void main(String args[])
    {
        List<String> specialCharList = new ArrayList<String>();
        try{
                String responseXml="test";
                String SPECIAL_CHARACTER ="(<[\\w\\d]*>(?=[^<]*[^<\\w\\!\\#\\$\\%\\&\\\'\\(\\)\\\\ \\*\\\"\\+\\,\\-\\~\\}\\{\\.\\/\\:\\;\\=\\?\\@\\]\\[\\\\\\`\\|]).*</[\\w\\d]*>)";
                if (!(responseXml == null || responseXml.toString().length() < 1 || responseXml.toString().equals("")))
                {
                    Pattern patternObject = Pattern.compile(SPECIAL_CHARACTER);   
                    Matcher patternMatcher = patternObject.matcher(responseXml);   
                    while(patternMatcher.find())
                    {   
                      specialCharList.add(patternMatcher.group());
                    }
                    if(specialCharList.isEmpty() || specialCharList.size()<0)
                    {
                        specialCharList.add("No Special Character's Detected");
                    }
                }
        }catch(Exception e)
        {

        }
        System.out.println(specialCharList);
    }
publicstaticvoidmain(字符串参数[])
{
List specialCharList=new ArrayList();
试一试{
字符串responseXml=“test”;

String SPECIAL_CHARACTER=“((?=[^首先,让我们解决正则表达式中的几个错误

(<[\w\d]*>(?=[^<]*[^<\w\!\#\$\%\&\'\(\)\ \*\"\+\,\-\~\}\{\.\/\:\;\=\?\@\]\[\\\`\|]).*</[\w\d]*>)
变成

[^<\w!#$%&'()\s*"+,-~}{./:;=?@\][\\`|]

[^Pls查找我尝试的java代码您期望什么,结果与期望有什么不同?
catch(Exception e){}
会让您很难了解发生了什么
[^<\w!#$%&'()\s*"+,-~}{./:;=?@\][\\`|]
<[\w]*>((?!<[\w]*>).)*[^<\w!#$%&'()\s*"+,-~}{./:;=?@\][\\`|]((?!<[\w]*>).)*</[\w]*>