【发布时间】:2020-04-29 02:24:46
【问题描述】:
我得到一个 xml 作为纯无格式文本 blob。我必须进行一些替换,我使用正则表达式查找和替换。 例如:
<MeasureValue><Text value="StartCalibration" /></MeasureValue>
必须转换为
<MeasureValue type="Text" value="StartCalibration"/>
我写的正则表达式是
<MeasureValue><((\w*)\s+value="(.*?)".*?)></MeasureValue>
替换零件是:
<MeasureValue type="$2" value="$3"/>
这里的link 显示相同。
问题是在一个有 370 次此类事件的文件中,出现内存不足错误。我听说过所谓的贪婪正则表达式模式,想知道这是否会困扰我。如果这已经是内存高效的,那么我将保持原样并尝试增加服务器内存。我必须处理数以千计的此类文件。
编辑:这是来自 Elasticsearch 的 Logstash 脚本的一部分。根据文档,Elasticsearch 在内部使用 Apache Lucene 来解析正则表达式。不确定这是否有帮助。
【问题讨论】:
-
你用什么语言实现这个正则表达式?
-
这是来自 Elasticsearch 的 Logstash 脚本的一部分。根据文档,Elasticsearch 在内部使用 Apache Lucene 来解析正则表达式。不确定这是否有帮助。如果我找到它,我会继续寻找并添加更具体的信息。
-
虽然可以改进模式(您可以通过使用负字符集而不是懒惰地重复使模式更快地失败),但我认为它不会导致灾难性的回溯或类似的事情,它不是非常效率低下。但是,在这种情况下,最好使用 XML 解析器而不是正则表达式
-
NotYetAgain,当被要求澄清时,正如@Certain 所做的那样,最好通过编辑问题来回应(并在适当的情况下添加标签,如此处),而不是在 cmets 中详细说明。问题应该是独立的,不应期望读者阅读所有 cmets 才能理解问题。
-
对html/xml应用正则表达式会让一些人失去理智:stackoverflow.com/a/1732454/7915759
标签: regex regex-group regex-greedy