我的文字是这样的:
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....
很多东西不仅有很多东西,而且还可以改变。如果" One:.... visible = true"我需要能够返回true。它可能是假的,也可能根本不存在。问题是其他行也可能不存在。
现在我有这个:
(?:\n|.)*One:(?:\n|.)*?visible=true(?:\n|.)*
这可以判断One是否存在,但是如果它是假的,那么我的正则表达式只是从下列之一中获取一个真值,因为它们的格式相同。我不能把#"#"在我的正则表达式结束时,因为它可能不存在。
我怎么说"寻找' visible = true'在' #One之后:'但在下一个'#'之前只有有以下情况'#'"?
我可以使用非贪婪的捕获组来抓取下一个之后的任何内容" hidden ="在"#One"之后。但后来我有三个结果,真实,虚假和不匹配。这有点困难,因为我在Android应用程序" Tasker"哪个可以获得组或测试匹配但是两个都需要多个操作。而且tasker工作的方式使得很难获得捕获组而不会破坏我的文本,所以我需要更多的操作来克隆我的文本。
答案 0 :(得分:0)
\bOne:(?:(?!\n#\w+)[\s\S])*?\bvisible=true[\s\S]*?(?=\n#\w+|$)
试试这个。看看演示。
答案 1 :(得分:0)
你需要非贪婪的任何东西 - 但是哈希序列 - [^#]*?
。这也需要是多行并匹配换行符,因此(?ms)
标志:
(?ms)#One:[^#]*?visible=true
以下是它的工作原理: