我想使用正则表达式检查XML标记之间的字符串长度。字符串的值总是6,我想检查是6。 我试过这样做:
<tag>(.+?){6,6}</tag>
但即使我改变数字也总是如此。
(?=^.{6}$)
这个正则表达式也不起作用,我得到一个正则表达式不包含的错误。
如何检查标签之间的字符串长度?
我没有这样验证xml,我只想检查断言。
答案 0 :(得分:1)
警告:您不应该以这种方式验证XML!正确的做法可能会成为一项非常复杂的任务。
相反,使用XML解析器,获取&#34;标记&#34;的文本值。元素,并检查其长度。
但如果您仍然希望这样做,以下正则表达式将按照您的描述进行(但可能不是您想要的!):
<tag>.{6}</tag>
为什么不做你想做的事?
因为这也会接受以下不需要的值:
<tag><foo/></tag>
它不会接受以下完全有效的值:
<tag>foo&ba</tag>
(即&#34;标签&#34;包含6个字符的文字&#34; foo&amp; ba&#34;。)
但它会接受以下不需要的值:
<tag>2>1</tag>
(即&#34;标记&#34;包含3个字符的文字&#34; 2&gt; 1&#34;。)
编写一个解决所有这些问题的正则表达式非常复杂且容易出错。如上所述,改为使用真正的XML解析器。
但是,如果您可以使用过于严格的正则表达式(即安全地拒绝所有无效值,但也拒绝某些有效值),并且您确定您的XML文件将是UTF-8编码的,那么你可以使用:
<tag>[^&<]{6}</tag>
即6个字符,其中没有&
或<
。
(您也可以将>
排除在&#34;确定&#34;,但这里实际上并不需要,因为>
是XML字符串中完全有效的字符因为它不是标记的一部分,即你控制所有开放的<
字符,在这种情况下你会这样做。)
如果您知道确切的允许字符集,事情就更简单了,您也可以使用它。例如,如果允许使用6个大写字母,则可以使用:
<tag>[A-Z]{6}</tag>
请注意,此正则表达式仍然过于严格,因为它不允许例如以下完全有效的输入:
<tag >[A-Z]{6}</tag>
答案 1 :(得分:-2)
简单而漫长的方法是从> +1和&lt;中获取子字符串。但是如果标签错误就像texttag&gt;那么它会抛出一个StringIndexOutOfBoundsException,如果是,那么它将是tagtext!
首先将该行作为字符串读取,然后将其转换为字符数组,然后迭代该行! 如果计数&lt; &安培; &GT;每个是2,然后从'&gt;获取子串&LT;”
List<String> list= new ArrayList<String>();
FileReader fr= new FileReader(path);
BufferedReader br= new BufferedReader(fr);
String str= null;
while((str=br.readLine())!=null)){
list.add(str);
}
//suppose you want to check 3rd line
int lbrack=0; rbrack=0;
String text= null;
String data= list.get(2);
char[] brack= data.toCharArray();
for(int i=0; i<brack.length;i++){
if(brack[i]=='<')
lbrack++;
if(brack[i]=='>')
rbrack++;
}
if(lbrack==2 && rbrack==2){
text= data.substr(data.indexOf(">")+1,data.indexOf("<"));
}
else {
System.out.println("this is root tag or some problem here");
}