我需要获取有关变量的信息,我唯一拥有的是变量名称。在这种情况下,假设我需要获取属于SOME_LARGE_VARIABLE
的块(每个chunck以<0>
开头,以<0>
结尾)
换句话说如何获取大块<0>....SOME_LARGE_VARIABLE.....<0>
注意我不想拥有<0> ...... <0> ..... SOME_LARGE_VARIABLE .... <0>
<0>
temp
<0>
fo0
<0>
BLA BLA BLA
kjfsd
foodskjdsf
kj
<0>
someVariable
<0>
SOME_LARGE_VARIABLE
<0>
到目前为止,我已经尝试过:
<0>[\s\S]*?SOME_LARGE_VARIABLE[\s\S]*?<0>
找到&lt; 0&gt;然后继续,直到找到SOME_LARGE_VARIABLE并停止,直到&lt; 0&gt;
注意将选择所有内容
我的临时解决方案是:
&℃,GT; [\ S \ S] {1,25} SOME_LARGE_VARIABLE [\ S \ S] * LT; 0&GT;
这会将选择限制为少于25个字符。我认为这是冒险的,因为可能有两个小于25个字符的组块
换句话说,我想最终得到:
<0>
SOME_LARGE_VARIABLE
<0>
我唯一知道的是SOME_LARGE_VARIABLE
知道每个块都以<0>
答案 0 :(得分:2)
您可以使用.*?
,而不是使用(?:(?!<0>).)*
,如下所示:
<0>(?:(?!<0>).)*SOME_LARGE_VARIABLE(?:(?!<0>).)*<0>
但你最好还是在<0>
分割字符串并检查哪些部分与SOME_LARGE_VARIABLE
匹配。
请注意,表达式永远不会匹配:
中的第二个“块”<0> SOME_LARGE_VARIABLE will match
<0> SOME_LARGE_VARIABLE will not match
<0>
因为表达式使用了第二个<0>
,所以不允许它匹配。 (分裂方法没有这个问题。)
你可以通过使用前瞻来解决这个问题:
<0>(?:(?!<0>).)*SOME_LARGE_VARIABLE(?:(?!<0>).)*(?=<0>)
如果您希望.
也匹配换行符,请在表达式的开头添加(?s)
,如下所示:
(?s)<0>(?:(?!<0>).)*SOME_LARGE_VARIABLE(?:(?!<0>).)*(?=<0>)