所以,我正在解析XML,并遇到了问题。 XML包含包含脚本的对象,其中包含以下内容:
return [
['measurement' : org.apache.commons.io.FileUtils.readFileToByteArray(new File('tab_2_1.png')),
'kpi' : org.apache.commons.io.FileUtils.readFileToByteArray(new File('tab_2_2.png'))]]
我需要替换所有文件名,保存文件格式,regexp模板的每个条目,因为字符串看起来像这样:
['measurement' : org.apache.commons.io.FileUtils.readFileToByteArray(new File('tab_2_1.png'))('tab_2_1.png'))('tab_2_1.png')),
我还需要在image_name
.png
我使用了这个正则表达式:.*\(\'(.*)\.png\'\)
,
但它只捕获\n
之前的最后一个匹配,而不是整个字符串。
你可以帮我纠正这个正则表达式吗?
答案 0 :(得分:2)
问题是.*
贪婪:它匹配所有。因此.*x
匹配字符串中最后一个x
的所有内容,即使所有内容都包含x
s。你需要非贪婪的
s/\('(.*?)\.png/('$replacement.png/g;
?
使.*
与第一个.png
匹配。需要\('
来适当地将模式划分为文件名。这正确地替换了所示示例中的文件名。
另一种方法是\('([^.]*)\.png
,其中[^.]
是否定字符类,匹配任何不 a {{1} }}。使用.
量词,它会再次匹配第一个*
问题并未说明你是如何“解析XML ”但我非常希望它与XML::LibXML XML::Twig之类的库一样。请不要尝试使用正则表达式。该工具并不完全适合这项工作,您将了解它。关于这一点已经写了很多,搜索SO。