难以想出一个正则表达式

时间:2011-03-11 15:21:34

标签: regex lua

我无法想出一个适用于两种情况的Lua 5.0正则表达式。

1)表达式= "[^V]Core %d+:%s*%+(%d+%.%d+)°C %(crit = %+(%d+%.%d+)°C%)" 这正确匹配此字符串:

Core 0:      +45.0°C  (crit = +100.0°C)

2)表达式= "[^V]Core %d+:%s*%+(%d+%.%d+)°C %(high = %+%d+%.%d+°C, crit = %+(%d+%.%d+)°C%)" 这正确匹配此字符串:

Core 0:      +45.0°C  (high = +86.0°C, crit = +100.0°C)

但是,我希望能够匹配任何一个字符串并具有2个捕获:第一个温度和临界温度。 (我不需要高温)。 我试过这个但没有运气:

expression = "[^V]Core %d+:%s*%+(%d+%.%d+)°C  %((?:high = %+%d+%.%d+°C, )crit = %+(%d+%.%d+)°C%)"

我在Lua,但我认为正则表达式表达式语法与其他语言(如Perl)非常匹配。 有人有什么想法吗?

2 个答案:

答案 0 :(得分:1)

Lua字符串patterns NOT 正则表达式

为了做你想做的事 - 匹配两个不同的字符串 - 你需要实际尝试两个匹配。

local input = ... -- the input string
-- try the first pattern
local temp, crit = string.match(input, "[^V]Core %d+:%s*%+(%d+%.%d+)°C %(crit = %+(%d+%.%d+)°C%)"
-- if it didn't match, try the second match
if not temp then
    temp, crit = string.match(input, "[^V]Core %d+:%s*%+(%d+%.%d+)°C  %(high = %+%d+%.%d+°C, crit = %+(%d+%.%d+)°C%)")
end
if temp then
    -- one of the two matches are saved in temp and crit
    -- do something useful here
end

答案 1 :(得分:0)

我认为您需要?组之后的(?:...)

在parens之前还有一些有趣的空格 - 字符串和非工作正则表达式有两个,而'工作'正则表达式有一个。我会使用%s +来获得稳健性。