正则表达式不匹配

时间:2012-10-07 20:40:21

标签: regex

我有以下正则表达式:

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

我对正则表达式很新。我有这个正则表达式和一个字符串,我试图看它是否匹配。我认为它应该匹配它,但我的程序说它没有,并且在线分析仪说他们不匹配。我很确定我错过了一些小事。这是我的字符串:

[1]+ Stopped    sleep 60

但是,当使用此在线工具检查匹配项(并且我的程序说它们不相等)时,为什么以下表达式与上述正则表达式不匹配?有什么想法吗?

3 个答案:

答案 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*$

相关问题