正規表現が一致しすぎるという問題があります。できるだけ貪欲にならないように心がけました。私の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/でテストできます