我无法想出一个适用于两种情况的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)非常匹配。 有人有什么想法吗?
答案 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 +来获得稳健性。