1

我有以下正则表达式:

"\[(\d+)\].?\s+(\S+)\s+(\/+?)\\r\n"

我对正则表达式很陌生。我有这个正则表达式和一个字符串,我想看看它是否匹配。我相信它应该匹配它,但我的程序说它不匹配,并且在线分析器说它们不匹配。我很确定我错过了一些小东西。这是我的字符串:

[1]+ Stopped    sleep 60

但是,当使用这个在线工具检查匹配时(我的程序说它们不相等),为什么下面的表达式与上面的正则表达式不匹配?有任何想法吗?

4

3 回答 3

1

您似乎在 \r 之前逃脱了 \ 导致它搜索字母 r

于 2012-10-07T20:45:42.687 回答
0

尝试使用这种模式:

\[\d+\]\+\s*\w+\s*\w+\s*\d+
于 2012-10-07T20:44:10.353 回答
0

RegExp 解释和允许的字符随实现而略有不同,因此您应该提供执行上下文,但这可能足够通用。

分解你的正则表达式给出

\[     - an open bracket character. 
(\d+)  - one or more digits; save this as capture group 1 ($1).
\]     - a close bracket character.
.?     - 0 or 1 character, of any kind
\s+    - 1 or more spaces.
(\S+)  - 1 or more non-space characters; save this as $2
\s+    - 1 or more spaces
(\/+?) - 1 or more forward-slash characters, optional as $3
         (not sure about this, this is an odd construct)
\\r\n" - an (incorrectly specified) end of line sequence, I think.

首先,如果要匹配行尾,请使用$,而不是\r\n。在大多数情况下,这应该与行尾相匹配。^ 匹配一行的开头。

其次,我无法从您的正则表达式中看出您在“已停止”一词之后要捕获的内容,所以我假设您希望将其余部分作为一个块,包括内部空间。一个与你基本相同的正则表达式就可以了。

"\[(\d+)\].?\s+(\S+)\s+(.+)\s*$"

这捕获

$1 = 1,
$2 = Stopped
$3 = sleep 60

除了结尾之外,这与您的基本相同,它在“停止”之后将所有内容作为单个捕获组抓取到行尾,$3,除了前导和尾随空白。如果要进行其他解析,请根据需要替换 (.+)。请注意,“停止”之后必须至少有 1 个非空白字符才能匹配。如果即使没有字符串 $3 也希望它匹配,请使用\s*(.*)\s*$而不是\s+(.+)\s*$

于 2012-10-07T21:22:47.470 回答