我有一个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>
允许的字符列表
\! " # $ % & ' ( ) * + , - . / 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 { | } ~
我试过以下
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);
}
但它没有按预期工作。 如何为上述场景编写正则表达式?请帮助我
答案 0 :(得分:0)
首先让我们解决你的正则表达式上的一些错误
(<[\w\d]*>(?=[^<]*[^<\w\!\#\$\%\&\'\(\)\ \*\"\+\,\-\~\}\{\.\/\:\;\=\?\@\]\[\\\`\|]).*</[\w\d]*>)
\w
是[A-Za-z0-9_]
的简写;在同一字符集\w
中包含\d
和[...]
都是多余的,因此<[\w\d]*>
可以简化为<[\w]*>
。
此外,除了反斜杠'\',右括号']'以及有时减号' - '之外,你不需要在内部字符集中进行任何转义。对于空白字符,您应该使用\s
- 它包括单个空格,选项卡式空格和换行符。因此,简化:
[^<\w\!\#\$\%\&\'\(\)\ \*\"\+\,\-\~\}\{\.\/\:\;\=\?\@\]\[\\\`\|]
变为
[^<\w!#$%&'()\s*"+,-~}{./:;=?@\][\\`|]
以下正则表达式效率不高:字符排除总是会增加计算量。它将匹配包含一个或多个“无效”字符的标签。
<[\w]*>((?!<[\w]*>).)*[^<\w!#$%&'()\s*"+,-~}{./:;=?@\][\\`|]((?!<[\w]*>).)*</[\w]*>
值得注意的是,如果性能很重要,你应该重新考虑你的错误解析方法。
本网站提供了对正则表达式的精彩介绍