所以,伙计们,我有这种自制模式。几个小时后(我不是正则表达式大师)这只小狗进化为我解析卷曲PUT输出:
^\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
更新:可以在我的博客文章(How to configure OnMyCommand to generate a progress bar for curl)上找到进一步的背景信息,这将解释我在做什么以及为什么我只使用正则表达式模式。我实际上并不是用一种语言编写代码,本身 ...但是配置工具来使用正则表达式。
答案 0 :(得分:3)
看起来这是我能做的最好的事情:
^\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+
但这并不意味着完全相同的事情。
答案 1 :(得分:0)
((^\s*|\s+)([^ ]+)){12}
如果你不关心比赛的数量并希望匹配一个完整的字符串,只需坚持以下内容。
((^\s*|\s+)([^ ]+))*\s*$
答案 2 :(得分:0)
如果你的正则表达式使用贪心匹配,这可能有用:
^(\s*([^ ]+))+$
说明: