Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 如果X在Y之前存在,但Y可能不存在,则正则表达式匹配_Regex - Fatal编程技术网

Regex 如果X在Y之前存在,但Y可能不存在,则正则表达式匹配

Regex 如果X在Y之前存在,但Y可能不存在,则正则表达式匹配,regex,Regex,我的文字是这样的: Stuff #One: *lots of stuff* visible=true *lots of stuff* #Two: *lots of stuff* visible=false *lots of stuff* #Three: *lots of stuff* visible=true *lots of stuff* Stuff.... 很多东西不仅仅是很多东西,而且还可以改变。我需要能够返回true,如果“One:

我的文字是这样的:

Stuff
#One: 
  *lots of stuff* 
  visible=true
  *lots of stuff* 
#Two: 
  *lots of stuff* 
  visible=false
  *lots of stuff* 
#Three: 
  *lots of stuff* 
  visible=true
  *lots of stuff* 
Stuff....
很多东西不仅仅是很多东西,而且还可以改变。我需要能够返回true,如果“One:……visible=true”,它可能是false,也可能根本不存在。问题是其他线路可能也不在那里

现在我有这个:

(?:\n|.)*One:(?:\n|.)*?visible=true(?:\n|.)*
这可以判断一个是否存在,但如果它是false,那么我的正则表达式只会从以下其中一个中获取true,因为它们的格式相同。我不能在正则表达式末尾加“#”,因为它可能不在那里

我如何在“一”之后说“查找'visible=true'”,但在下一个“#”之前,只有在有以下“#”的情况下才这么说

我可以使用一个非贪婪的捕获组来抓取下一个“hidden=”之后的任何东西。但是我有三个结果,真的,假的,不匹配的。这有点困难,因为我在android应用程序“Tasker”中工作,它可以获取组或测试匹配,但这两种操作都需要多次操作。tasker的工作方式使得在不删除我的文本的情况下很难获得捕获组,因此我需要更多的操作来首先克隆我的文本

\bOne:(?:(?!\n#\w+)[\s\S])*?\bvisible=true[\s\S]*?(?=\n#\w+|$)
试试这个。看演示


您需要非贪婪的非哈希序列--
[^#]*?
。这也需要是多行的并匹配换行符,因此
(?ms)
标志:

(?ms)#One:[^#]*?visible=true
下面是它的工作原理:


您必须使用正则表达式吗?因为它确实不是执行此类任务的合适工具。@Juhana我在帖子中补充说,我正在使用android应用程序“Tasker”,因此我解析文本的选项非常有限。所以要回答你的问题,是的,据我所知,我需要使用正则表达式。也许效率更低。@Stribizev匹配相同的东西,只是没有分组