我有以下正则表达式:
"\[(\d+)\].?\s+(\S+)\s+(\/+?)\\r\n"
我对正则表达式很新。我有这个正则表达式和一个字符串,我试图看它是否匹配。我认为它应该匹配它,但我的程序说它没有,并且在线分析仪说他们不匹配。我很确定我错过了一些小事。这是我的字符串:
[1]+ Stopped sleep 60
但是,当使用此在线工具检查匹配项(并且我的程序说它们不相等)时,为什么以下表达式与上述正则表达式不匹配?有什么想法吗?
答案 0 :(得分:1)
你似乎已经在\ r \ n之前转义了\,导致它搜索字母r
答案 1 :(得分:0)
尝试使用此模式:
\[\d+\]\+\s*\w+\s*\w+\s*\d+
答案 2 :(得分: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。在大多数情况下,这应该匹配一行的结尾。 ^匹配一行的开头。
其次,我无法从你的正则表达式中看出你在“已停止”字之后想要捕获的是什么,所以我假设你想把剩下的作为一个块,包括内部空间。 reg-exp基本上与你的相同。
"\[(\d+)\].?\s+(\S+)\s+(.+)\s*$"
此捕获
$1 = 1,
$2 = Stopped
$3 = sleep 60
这与你的基本相同,除了结尾之外,它在“停止”之后抓住所有内容作为单个捕获组,3美元,除了前导和尾随空白之外。如果要进行其他解析,请根据需要替换(。+)。请注意,“停止”后必须至少有一个非空白字符才能匹配。如果您希望它匹配,即使没有字符串$ 3,也请使用\s*(.*)\s*$
代替\s+(.+)\s*$