我有以下文字
`h1` text `/h1` `i` text `/i` `u` text `/u`
此处h1
/h1
,i
/i
,u
/u
完全存在,因此应传递此文字。现在拿这个文本
`h1` text `/h1` `i` text `/i` `u` text `/u
此处缺少u
/u
组合。所以上面的文字失败了。
我试过这个
String startTags[] = {"`b`","`h1`","`h2`","`h3`","`h4`","`h5`","`h6`","`ul`","`li`","`i`","`u`"};
String endTags[] = {"`/b`","`/h1`","`/h2`","`/h3`","`/h4`","`/h5`","`/h6`","`/ul`","`/li`","`/i`","`/u`"};
for(int i=0;i<startTags.length;i++){
if(str.indexOf(startTags[i])!=-1){
System.out.println(">>>>"+startTags[i]);
startTagCount++;
}
if(str.indexOf(endTags[i])!=-1){System.out.println("+++"+endTags[i]);
endTagCount++;
}
}
if(startTagCount==endTagCount){
//TEXT IS OK
}else{
// TEXT FAILED
}
它传递到文本下方而不是失败
`h5`Is your question about programming? `/h5`
`b` bbbbbbbbbbbbbb`/b`
`b` bbbbbbbbbbbbbb`/b
java中有哪些更好的解决方案或正则表达式?
答案 0 :(得分:1)
我担心(严格)正则表达式无法解决这个问题,因为你描述的语言不是regular language,它扩展了语言{a n b n },这是一种众所周知的非常规语言。
答案 1 :(得分:0)
如果您关心的是确保所有开始标记都有匹配的结束标记,那么您可以使用正则表达式。
您的代码存在逻辑问题,因为您计算所有开始标记和所有结束标记,但不检查开始标记和结束标记是否实际匹配。 startTagCount和endTagCount变量不够用。我建议使用地图,使用标签类型作为键,值作为计数。打开标签的递增计数,关闭标签的递减计数。扫描完成后检查非零。
这种“语言”的语法是什么?您的方法可能不是正确的验证。例如,此HTML具有匹配的标记计数但无效:
<b><i>Invalid</b></i>