Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在正则表达式模式中重复组模式_Regex_Curl - Fatal编程技术网

Regex 在正则表达式模式中重复组模式

Regex 在正则表达式模式中重复组模式,regex,curl,Regex,Curl,所以,伙计们,我有一个自己制作的模式,可以工作。几个小时后(我不是正则表达式大师),这只小狗进化为我解析curl-PUT输出: ^\s*([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+) \s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+) (仅用于格式化的文本CR) 它给我提供了我可以访问的“组”——它很有效!然而,我身上的编码员看到了一种模式的重

所以,伙计们,我有一个自己制作的模式,可以工作。几个小时后(我不是正则表达式大师),这只小狗进化为我解析curl-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 
更新:更多的背景可以在我的一篇博客文章()中找到,这篇文章将解释我在做什么,以及为什么我只需要一个正则表达式模式。实际上,我并不是在用一种语言编写代码,而是在配置一个工具来使用正则表达式

((^\s*|\s+)([^ ]+)){12}
如果您不关心匹配的数量,并且希望匹配一个完整的字符串,只需坚持以下内容

((^\s*|\s+)([^ ]+))*\s*$

看来这是我能做的最好的了:

^\s*([^ ]+)\s+([^ ]+)\s+(?:[^ ]+\s+){3}([^ ]+)\s+[^ ]+\s+([^ ]+)\s+
我折叠了你不关心的比赛,使它们不被捕获,并删除了不必要的尾随比赛。如果匹配所有内容很重要(例如,有其他行与此匹配),您可以说:

^\s*([^ ]+)\s+([^ ]+)\s+(?:[^ ]+\s+){3}([^ ]+)\s+[^ ]+\s+([^ ]+)(?:\s+[^ ]){4}
注意,我的更改也会更改捕获编号:

  • $1:完成百分比
  • $2:目前上传的大小
  • $3:要上载的大小
  • $4:平均上传速率
如果它支持\S,您可能可以不受影响

^\s*(\S+)\s+(\S+)\s+(?:\S+\s+){3}(\S+)\s+\S+\s+(\S+)\s+

但这并不意味着完全相同的事情。

如果您的正则表达式使用贪婪匹配,这可能会起作用:

^(\s*([^ ]+))+$
说明:

  • ^=线路起点
  • 重复模式=\s*([^]+)
  • 用括号括起来,加上“+”表示“一个或多个前面的匹配”
  • $=行尾

谢谢你,nzpcmad……我的法术很厉害。(哈哈)有关系吗?我正在使用onmycommandforosx,我相信它使用的是命令行grep,但我可能会有错误。OnMyCommand只允许正则表达式。在我的一篇博文中有详细的背景…将添加到QIt的链接很重要,因为如果它是Perl,你可以用代码构建正则表达式,我将去看看OnMyCommand是做什么的。你能发布你现在拥有的吗,这样我们就有了一个起点?至少在Perl中,这不起作用,您只能获取捕获中11个重复匹配中的最后一个。我使用的是.NET/C。所以我不能说他们的正则表达式实现。看起来它在JavaScript中也不起作用。我不知道他使用的是什么正则表达式实现,但我怀疑它能否用{12}捕获他所需要的组。NET允许您从重复的组中分离出单个捕获,但在这方面它是独一无二的。此外,检索单个捕获的唯一方法是通过API调用,如M.Groups(2).captures(6)。(也许有一天会有一个类似于“$2#6”的简写符号,但我对此表示怀疑。)这不是Stu可以使用的解决方案。看起来他正试图从输出中提取四个不同的值,这会生成两个捕获,其中一个是另一个的子匹配。感谢您的回答和其他地方的评论。邦佐的就寝时间到了,但早上会测试你和其他人的选择。谢谢太好了,谢谢。第一种方法(从我的原创作品中咯咯地笑着捕捉到的数字)用于一个只有原创作品55%的表达式。我没有尝试第二个,因为它更长。第三个不起作用。