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
下面是它的工作原理: