0

我是 perl 新手,在匹配字符串的特定部分时遇到问题。

我要匹配的是粗体:

[1339300800] 当前主机状态:某事

至少,我成功地匹配了括号之间的字符串!

($line=~/\[(\d*)\]*/)

我正在为粗体部分尝试这样的事情:

($line=~/STATE:\s(\S+);/)

有人可以给点建议吗?

4

3 回答 3

2

你的正则表达式

STATE:\s([^;]*);

对我有用。请记住,它在第 1 组中匹配

if ($subject =~ m/STATE:\s(\S+);/) {
    $result = $1;
} else {
    $result = "";
}

此外,可以使第一个正则表达式不那么冗长

\[(\d*)]
于 2012-06-15T20:38:49.103 回答
2

如果语句总是以 a 结尾;,你可以这样写:

$line =~ /:\s([^;]+)/
于 2012-06-15T20:39:14.570 回答
1

你很接近:

$line =~ /STATE:\s+([^;]+);/

这将得到所有不是分号的东西。如果 STATE 和“某物”之间有多个空格,它仍然会匹配

于 2012-06-15T20:39:04.423 回答