我有一个问题,我的正则表达式匹配太多。我已经尝试让它尽可能不贪婪。我的RE是:
define host( |\t)*{(.*\n)*?( |\t)*host_name( |\t)*HOST_B(.*\n)*?( |\t)*}
意义
“定义主机”后跟任何空格或制表符,后跟“{”。任何文本和换行符,直到任意数量的空格或制表符后跟“host_name”,然后是任意数量的空格或制表符,后跟“HOST_B”。任何文本加上换行符,直到任何空格或制表符后跟“}”
我的文字是
define host{
field stuff
}
define timeperiod{
sunday 00:00-03:00,07:00-24:00
}
define stuff{
hostgroup_name things
service_description load
dependent_service_description cpu_util
execution_failure_criteria n
notification_failure_criteria w,u,c
}
define host{
use things
host_name HOST_A
0alias stuff
}
define host{
use things
host_name HOST_B
alias ughj
address 1.6.7.6
}
define host{
use things
host_name HOST_C
}
匹配从第一个定义到 host_b 的结束括号。它没有得到 host_c 的组(它不应该得到 host_c),但是我只想要主机 b 的组而不是整个事情。
有什么帮助吗?我的正则表达式生锈了。您可以在http://regexpal.com/上进行测试