<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE ... ]>
<abc-config version="THIS" id="abc">
...
</abc-config>
大家好,
在上面的代码中,如何在Groovy / Java中使用Regex提取版本属性的值?
感谢。
答案 0 :(得分:2)
处理此问题的正则表达式可能类似于:
/<\?xml version="([0-9.]+)"/
关于不使用正则表达式解析标记语言的10000个讲座,我将免费为您提供一个。
修改: The One whose Name cannot be expressed in the Basic Multilingual Plane, He compelled me。
答案 1 :(得分:2)
我知道你要求正则表达式,但是在Groovy中这有什么问题?
假设xml类似于:
def xml= '''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE abc-config>
<abc-config version="THIS" id="abc">
<node></node>
</abc-config>'''
然后我可以解析它:
def n = new XmlSlurper().parseText( xml )
然后这一行:
println n.@version
打印出“这个”
如果您有problems with a more complex DOCTYPE failing to load,可以尝试通过以下方式禁用DOCTYPE检查器:
def parser = new XmlSlurper()
parser.setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false )
parser.setFeature( "http://xml.org/sax/features/namespaces", false )
parser.parseText( xml )
或使用the constructor for XmlSlurper that takes 2 parameters以禁用此检查
答案 2 :(得分:0)
不是java正则表达式,Perl正则表达式...
/<\w+\s+[^>]*?(?<=\s)version\s*=\s*["'](.+?)["'][^>]*?\s*\/?>/sg
请注意,这在许多级别上失败,我可以用正确的正则表达式填充页面,但我没有这个愿望。
这也失败了...
/<\w+\s+[^>]*?(?<=\s)version\s*=\s*(".+?"|'.+?')[^>]*?\s*\/?>/sg
这是这样的
/<\w+\s+[^>]*?(?<=\s)version\s*=\s*(["'])(.+?)\1[^>]*?\s*\/?>/sg