如何多次匹配正则表达式?

时间:2015-12-23 17:46:40

标签: regex matlab

我有一个日志文件,我正在尝试扫描模式并计算某些模式的显示次数。日志看起来像这样

11298 [out] [worker:83]数据已经重建。

11299 [out] [worker:83] END为foo建立数据

11299 [out] [worker:83] END建立数据栏

11300 [out] [worker:83] BEGIN为baz建立数据

11301 [错误] [工人:83]普京轰炸叙利亚

我对以[out]开头并包含END,BEGIN或重建的所有行感兴趣(需要单独计算)。所以我认为以下正则表达式

(out.*END)*

会多次匹配模式out] anything here END的补丁,但它只会在我的文件中为我提供out的第一个实例并停止。有人能指出我正确的方向吗?

我在MATLAB中使用语法regexp(txt,expr,'start')

执行此操作

1 个答案:

答案 0 :(得分:2)

这是一个文档:http://www.mathworks.com/help/matlab/ref/regexp.html

默认情况下,

regexp会返回所有匹配项。

尝试使用选项和outkeys(作为第3个参数传递)。看起来这个可以帮助:'dotexceptnewline' - 你的正则表达式是贪婪的,可能与整个事物匹配(从第一个out到最后一个END)。

尝试使用outkey 'match'代替'start'

同时检查您的结果是否未被错误截断。