我有以下正则表达式:
"\[(\d+)\].?\s+(\S+)\s+(\/+?)\\r\n"
我对正则表达式很陌生。我有这个正则表达式和一个字符串,我想看看它是否匹配。我相信它应该匹配它,但我的程序说它不匹配,并且在线分析器说它们不匹配。我很确定我错过了一些小东西。这是我的字符串:
[1]+ Stopped sleep 60
但是,当使用这个在线工具检查匹配时(我的程序说它们不相等),为什么下面的表达式与上面的正则表达式不匹配?有任何想法吗?
我有以下正则表达式:
"\[(\d+)\].?\s+(\S+)\s+(\/+?)\\r\n"
我对正则表达式很陌生。我有这个正则表达式和一个字符串,我想看看它是否匹配。我相信它应该匹配它,但我的程序说它不匹配,并且在线分析器说它们不匹配。我很确定我错过了一些小东西。这是我的字符串:
[1]+ Stopped sleep 60
但是,当使用这个在线工具检查匹配时(我的程序说它们不相等),为什么下面的表达式与上面的正则表达式不匹配?有任何想法吗?
您似乎在 \r 之前逃脱了 \ 导致它搜索字母 r
尝试使用这种模式:
\[\d+\]\+\s*\w+\s*\w+\s*\d+
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*$