Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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_Batch File - Fatal编程技术网

Regex 如何从批处理输出中检查内存是否大于一定量?

Regex 如何从批处理输出中检查内存是否大于一定量?,regex,batch-file,Regex,Batch File,我有一个批处理文件,它从远程服务器提取信息,并显示我的一项服务的信息 我使用的批次如下所示: tasklist /s TESTING1 /u TESTSvc /p T$ST1ng /fi "services eq test" Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =======

我有一个批处理文件,它从远程服务器提取信息,并显示我的一项服务的信息

我使用的批次如下所示:

tasklist /s TESTING1 /u TESTSvc /p T$ST1ng /fi "services eq test"
Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
tomcat9.exe                   5628 Services                   0  1,455,204 K
当我运行批处理时,我会返回信息,但需要创建一个正则表达式,它会让我知道内存是否大于某个数量。我是Regex新手,需要弄清楚如何写这个

批次结果如下:

tasklist /s TESTING1 /u TESTSvc /p T$ST1ng /fi "services eq test"
Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
tomcat9.exe                   5628 Services                   0  1,455,204 K
我已经看过了

我尝试了每个人推荐的答案,但没有得到所需的结果


该服务的内存可能高于显示的内存。如果超过1.8gb,服务将开始无法正常响应

获得1.8g-999.9t的一种方法
是这样的:

[ ](1,[89]\d{2},\d{3}|[2-9],\d{3},\d{3}|[1-9]\d{1,2},\d{3},\d{3}|[1-9]\d{0,2},\d{3},\d{3},\d{3})[ ]K$
扩大

 [ ] 
 (                                        # (1 start)
      1, [89] \d{2} , \d{3}                    # 1.8 G - 1.99 G
   |  
      [2-9] , \d{3} , \d{3}                    # 2.0 G - 9.9 G
   |  
      [1-9] \d{1,2} , \d{3} , \d{3}            # 10.0 G - 999.9 G
   |  
      [1-9] \d{0,2} , \d{3} , \d{3} , \d{3}    # 1.0 T  - 999.9 T
 )                                        # (1 end)
 [ ] 
 K
 $

要匹配
1800000
99999999
之间的任何数字,然后是空格字符,然后是字母
K
,可以使用:

\b(?:1,[89]|(?:[2-9]|[1-9]\d{1,2}),\d)\d\d,\d{3} K
演示:

细分:

\b              # Word boundary.
(?:             # Start of a non-capturing group.
    1,          # Matches `1,` literally.
    [89]        # Matches 8 or 9 literally.
    |           # Alternation (OR).
    (?:         # Start of 2nd non-capturing group.
        [2-9]   # Matches any digit between 2 and 9.
        |       # OR..
        [1-9]   # A digit between 1 and 9.
        \d{1,2} # Followed by one or two digits.
    )           # End of 2nd non-capturing group.
    ,           # Matches `,` literally.
    \d          # Matches one digit.
)               # End of 1st non-capturing group.
\d\d            # Matches two digits.
,               # Matches `,` literally.
\d{3}           # Matches 3 digits.

K               # Matches `K` literally.

要使下限
1200000
代替
1800000
,只需将
[89]
部分替换为
[2-9]

\b(?:1,[2-9]|(?:[2-9]|[1-9]\d{1,2}),\d)\d\d,\d{3} K

演示:

那么,您想忽略
1800000
以下的任何数字吗?您可以使用
(?:1,8 |)(?:[2-9]|\d{2,3}),\d)\d\d、\d{3}
。请在此处尝试:。编辑:显然,
findstr
{count}
语法。您计划如何使用正则表达式?我使用正则表达式是为了让我知道内存使用是否大于1.8GB。我只需要语法,因为我有一个工具,需要正则表达式来提醒我你在使用什么工具正则表达式?什么是正则表达式的味道,等等。?以上模式对您有效吗?我使用的是IDERA正常运行时间基础结构监视器。它们没有说明使用了什么风格的正则表达式。我已经联系过他们,他们让我看看。试试这个
(?:1,[2-9]|)(?:[2-9]|\d{2,3}),\d)\d\d,{3}
。看这里:你的答案也很有效。谢谢你的帮助。@bgrif-不管你如何分割它,如果正则表达式没有机器生成的组件,它就不会工作。所以,我想我的正则表达式是唯一有效的,不是那么好的。选择正确的答案永远不晚,我必须告诉你。你的答案是最有效的。所以这是唯一的答案。@sln我怀疑
tasklist
是否会返回一个前导为零的内存使用率值,但您是对的;固定的现在你看,你不能仅仅为了让你的正则表达式工作更容易而依赖那些假设。为了内心的平静,这些事情必须是完美的。我就知道你会用那个零钱来解决这个问题。现在您已经了解了,看看我的答案中机器生成的正则表达式,您现在已经了解了所有组件。不同的是,你的是所有的因素和切片。我打赌这会减慢正则表达式的速度,我会给它们做基准点,看看所有额外的工作是否真的有用。嗯,我不确定你所说的“机器生成的正则表达式/组件”到底是什么意思,但是走捷径有什么错?事实上,我并没有花很长的时间编写正则表达式,而是尽量使其简洁;这是我首先想到的。这正是我在编写正则表达式模式时的想法。除非模式是错误的,或者实际上有一个明显的开销,否则我为什么要尝试这么直白呢?我们不妨编写类似于
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
,而不是
[0-9]
?@sln基于您的基准测试,看起来更短的模式更快;我错过什么了吗?再一次,如果是另一种情况,我永远不会使用更长的正则表达式/代码,除非a)我真的需要性能增益。或者b)它提高了可读性。关于交替与角色类的事情,我不认为交替总是更快;检查。我想说快2%,几乎不重要。但是,这是一个非常简单的正则表达式。我将始终保持一个完整的子范围块,带有注释,以确保我不会犯错误,或者如果我犯了错误,如何快速纠正错误。