如何使用正则表达式进行多行模式
How to may multiple lines pattern with regular expression
我想匹配我的代码中的 SYSTEM 定义。系统块定义如下:
"customized system name" = SYSTEM
TYPE = PSZ
Other system definition
FAN-SCHEDULE = "S1 Sys1 (PSZ) Fan Sch"
CONTROL-ZONE = "EL1 South Perim Zn (G.S1)"
..
我的代码示例如下:
$---- First SYSTEM block
"EL1 Sys1 (PSZ) (G.C5)" = SYSTEM
TYPE = PSZ
FAN-SCHEDULE = "S1 Sys1 (PSZ) Fan Sch"
CONTROL-ZONE = "EL1 South Perim Zn (G.S1)"
..
$---- First ZONE block
"EL1 West Perim Pl Zn (G.W9)" = ZONE
TYPE = CONDITIONED
..
$---- Second SYSTEM block
"EL1 Sys1 (PSZ) (G.W4)" = SYSTEM
TYPE = PSZ
FAN-SCHEDULE = "S1 Sys1 (PSZ) Fan Sch"
CONTROL-ZONE = "EL1 South Perim Zn (G.S1)"
..
$---- Second ZONE block
"EL1 Core Pl Zn (G.C10)" = ZONE
TYPE = CONDITIONED
..
据我所知,创建了以下正则表达式以仅匹配系统块:
^"(.*?)= SYSTEM(.*?)\.\.
但是正确匹配第一个系统块后,表达式会错误地将第二个区域和系统块匹配在一起:
Mis-match screen shot
我想知道如何改善我的表达方式。
你可以用这个正则表达式来做到这一点:
^".*? = SYSTEM(?:(?!\s*\.\.)[\s\S])+
说明:我们使用tempered greedy token来声明SYSTEM
块末尾的两个点。 [\s\S]
作为修改后的 .
以匹配多行中的所有内容。
关于 Notepad++:确保关闭该选项 . matches newline
它会起作用。
我想匹配我的代码中的 SYSTEM 定义。系统块定义如下:
"customized system name" = SYSTEM
TYPE = PSZ
Other system definition
FAN-SCHEDULE = "S1 Sys1 (PSZ) Fan Sch"
CONTROL-ZONE = "EL1 South Perim Zn (G.S1)"
..
我的代码示例如下:
$---- First SYSTEM block
"EL1 Sys1 (PSZ) (G.C5)" = SYSTEM
TYPE = PSZ
FAN-SCHEDULE = "S1 Sys1 (PSZ) Fan Sch"
CONTROL-ZONE = "EL1 South Perim Zn (G.S1)"
..
$---- First ZONE block
"EL1 West Perim Pl Zn (G.W9)" = ZONE
TYPE = CONDITIONED
..
$---- Second SYSTEM block
"EL1 Sys1 (PSZ) (G.W4)" = SYSTEM
TYPE = PSZ
FAN-SCHEDULE = "S1 Sys1 (PSZ) Fan Sch"
CONTROL-ZONE = "EL1 South Perim Zn (G.S1)"
..
$---- Second ZONE block
"EL1 Core Pl Zn (G.C10)" = ZONE
TYPE = CONDITIONED
..
据我所知,创建了以下正则表达式以仅匹配系统块:
^"(.*?)= SYSTEM(.*?)\.\.
但是正确匹配第一个系统块后,表达式会错误地将第二个区域和系统块匹配在一起: Mis-match screen shot
我想知道如何改善我的表达方式。
你可以用这个正则表达式来做到这一点:
^".*? = SYSTEM(?:(?!\s*\.\.)[\s\S])+
说明:我们使用tempered greedy token来声明SYSTEM
块末尾的两个点。 [\s\S]
作为修改后的 .
以匹配多行中的所有内容。
关于 Notepad++:确保关闭该选项 . matches newline
它会起作用。