需要在xml根据关键字定位,然后匹配位置附件的某个标签,如:
根据一下代码中,开始定位第一个'w:tbl'标签,然后匹配针对'w:tbl'中的内容。
开始
<w:tbl>.......</w:tbl>
这是一个测试
<w:tbl>......</w:tbl>
测试2
结束
使用的正则表达式为:开始.+<(w:tbl)>.*<\/\1>
,却总是为会匹配到第二个w:tbl
结束。
怎样修正,可以只匹配到第一个w:tbl
,即:
谢谢。
需要在xml根据关键字定位,然后匹配位置附件的某个标签,如:
根据一下代码中,开始定位第一个'w:tbl'标签,然后匹配针对'w:tbl'中的内容。
开始
<w:tbl>.......</w:tbl>
这是一个测试
<w:tbl>......</w:tbl>
测试2
结束
使用的正则表达式为:开始.+<(w:tbl)>.*<\/\1>
,却总是为会匹配到第二个w:tbl
结束。
怎样修正,可以只匹配到第一个w:tbl
,即:
谢谢。
用正则处理XML/JSON是一个必须一棍打死的想法。题主的问题就是不可回答的。
这个问题有一个语义学的解释(XML/JSON等的语义更为高阶,正则的语义级别不足以解释),但我不太会详细展开这一点。
就算不谈语义学,用正则解析XML也无法覆盖格式略有不同但确实100%合法的XML,违反了程序对输入输出格式宽进严出的原则。例如以下任何一行的XML,正则表达式如之奈何?
<w:tbl property1="value1"></w:tbl >
<w:tbl></w:tbl >
<!-- <w:tbl></w:tbl> -->
请使用非贪婪模式
开始.+<(w:tbl)>.*?<\/\1>
另外,既然是xml文件,建议使用解析
xml
的方法来解决问题。UPDATE::=========
看到了题主自己的答案了,我疏忽了。
这里我想给出另外一种答案:
开始[^<]*<(w:tbl)>[^<]*<\/\1>
UPDATE::=========
对于题主的答案,还是存在问题
开始.*?<(w:tbl)>.*<\/\1>
后面的
<(w:tbl)>.*<\/\1>
没有做约束,还是会匹配到这些行