【发布时间】:2017-05-19 22:54:34
【问题描述】:
我想我很擅长正则表达式,但这个让我很难过。搜索字符串如下所示...
ISA*lots**of~other~data**with~~no terminating **pattern~ISA*lots**of~other~data**with~~no terminating **pattern~ISA*lots**of~other~data**with~~no terminating **pattern~ISA*lots**of~other~data**with~~no terminating **pattern~
没有换行符。
ISA*是一致的起始模式。字符串的其余部分是完全不可预测的。
我需要
ISA*和该模式的下一个实例之前的所有字符。
我的尝试
积极的前瞻,但这并没有捕捉到最后的结果。
(ISA\*(.*(?=ISA\*))?)
积极的回顾,但我不知道如何让它变得懒惰。如果不是懒惰,那就只有一场比赛。但如果它是惰性的,你会得到正确数量的匹配,但模式后面只有一个额外的字符。
ISA\*(?<=ISA\*).*?
另一种解决方案是以编程方式将split 或explode 字符串,删除第一个(空)结果,然后将分隔符重新附加到每个结果。确实,这就是我已经拥有的。但是文件的大小、大量的结果以及后处理会导致性能问题。在初步测试中,使用正则表达式似乎提供了一些有价值的性能提升。
这是用 PHP 处理的。该字符串来自 AS400 系统,位于“EDI Transaction”文本文件中。我还没有找到任何包含此类文件的工作正则表达式的库。
【问题讨论】:
-
@bobblebubble 感谢您的回复。您应该将此作为答案提交。它用最少的代码行完成任务。
-
恢复了我的答案。很高兴它对你有帮助:)
标签: regex pcre regex-lookarounds