所以,各位,我有一个自我设计的模式,可以工作。过了几个小时(我不是正则大师),这只小狗进化到为我解析卷曲输出:
^\s*([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)
\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)(CR仅用于格式设置)
它给了我访问的“团体”然而,我的编码器看到一个模式的重复,它使我感到烦恼。多年来,我见过perl如何小即你的模式竞赛,这使我认为这可能要小得多。但是我的尝试却以惨败告终。
因此,的问题是:如何以更简洁的方式编写这个模式,以便我仍然可以提取目标组?
这可能并不重要,但下面是我要找的几个小组:
$1: percent finished
$2: size uploaded so far
$6: size to upload
$8: average upload rate 更新:在我的博客(如何配置OnMyCommand以生成curl进度条)上可以找到更多的背景信息,这篇文章将解释我在做什么,以及为什么我只追求正则表达式。实际上,我并不是用语言编写代码,而是按照se...but配置工具来使用regex。
发布于 2009-04-22 21:32:42
看来这是我所能做的最好的了:
^\s*([^ ]+)\s+([^ ]+)\s+(?:[^ ]+\s+){3}([^ ]+)\s+[^ ]+\s+([^ ]+)\s+我破坏了你不关心的火柴,使它们不被捕获,并停止了不必要的拖尾火柴。如果匹配所有内容都很重要(例如,还有其他行可以与此匹配),您可以这样说:
^\s*([^ ]+)\s+([^ ]+)\s+(?:[^ ]+\s+){3}([^ ]+)\s+[^ ]+\s+([^ ]+)(?:\s+[^ ]){4}注意,我的更改还更改了捕获号:
如果它支持\S,你可能会逃脱
^\s*(\S+)\s+(\S+)\s+(?:\S+\s+){3}(\S+)\s+\S+\s+(\S+)\s+但这并不意味着完全相同的事情。
发布于 2009-04-22 21:19:07
((^\s*|\s+)([^ ]+)){12}如果您不关心匹配的数量,并希望匹配一个完整的字符串,只需坚持以下几点。
((^\s*|\s+)([^ ]+))*\s*$发布于 2009-04-22 21:34:40
如果您的regex使用贪婪匹配,这可能会奏效:
^(\s*([^ ]+))+$说明:
https://stackoverflow.com/questions/779245
复制相似问题