获取关键字出现的块

时间:2012-06-19 23:33:00

标签: c# .net regex

我需要获取有关变量的信息,我唯一拥有的是变量名称。在这种情况下,假设我需要获取属于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>

开头和结尾

1 个答案:

答案 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>)