Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 按内容按块筛选器拆分的正则表达式_Regex - Fatal编程技术网

Regex 按内容按块筛选器拆分的正则表达式

Regex 按内容按块筛选器拆分的正则表达式,regex,Regex,我想删除每个从X开始、以Y结束并包含值Z的块 正文: 结果: BEGIN DESCRIPTION: 1234 BOOL:TRUE END BEGIN DESCRIPTION: 4568 BOOL:TRUE END BEGIN DESCRIPTION: 12489453 BOOL:TRUE END 在这里,我们希望删除每个以“开始”开头、以“结束”结尾、内部带有“BOOL:FALSE”的bloc。 另一种观点是:我想让每个集团都以“开始”开始,以“结束”结束,里面有“BOOL:TRUE” 这一

我想删除每个从X开始、以Y结束并包含值Z的块

正文:

结果:

BEGIN
DESCRIPTION: 1234
BOOL:TRUE
END
BEGIN
DESCRIPTION: 4568
BOOL:TRUE
END
BEGIN
DESCRIPTION: 12489453
BOOL:TRUE
END
在这里,我们希望删除每个以“开始”开头、以“结束”结尾、内部带有“BOOL:FALSE”的bloc。 另一种观点是:我想让每个集团都以“开始”开始,以“结束”结束,里面有“BOOL:TRUE”

这一个取第一个开始,搜索第一个bool:false,然后再搜索结束。那是不对的。 (?s)(开始?布尔:错误?结束)

我想要的是,它就像在屏幕上使用过滤器一样

(?s)(BEGIN.*?BOOL\:FALSE.*?END)
按布尔值筛选:FALSE

(?s)(BEGIN.*?BOOL\:FALSE.*?END)[.FILTERBY_BOOL:FALSE

您可以对此使用负前瞻:

BEGIN((?!TRUE).)*?END
这将检查您拥有的每个点是否前面没有
TRUE
,直到
END
。因此,不带
TRUE
的所有其他块都将被删除

您还可以插入一个
[\r\n]?
,使东西更干净一些:

[\r\n]?BEGIN((?!TRUE).)*?END

编辑: 如果只想精确定位
FALSE
,可以使用这个正则表达式,它稍微长一点:

[\r\n]?BEGIN(?:(?!FALSE|END).)*?FALSE(?:(?!FALSE|END).)*?END

.

对此,您可以使用负前瞻:

BEGIN((?!TRUE).)*?END
这将检查您拥有的每个点是否前面没有
TRUE
,直到
END
。因此,不带
TRUE
的所有其他块都将被删除

您还可以插入一个
[\r\n]?
,使东西更干净一些:

[\r\n]?BEGIN((?!TRUE).)*?END

编辑: 如果只想精确定位
FALSE
,可以使用这个正则表达式,它稍微长一点:

[\r\n]?BEGIN(?:(?!FALSE|END).)*?FALSE(?:(?!FALSE|END).)*?END

.

你在用什么语言?你在用什么语言?我认为这是一个很好的解决方案,+1代表Jerry。@Sniffer感谢你的提醒:)我认为这是一个很好的解决方案,+1代表Jerry。@Sniffer感谢你的提醒:)