1

変数に関する情報を取得する必要がありますが、私が持っているのは変数名だけです。この場合、属するチャンクを取得する必要があるとしましょうSOME_LARGE_VARIABLE(すべてのチャンクは で始まり、<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>

<0> を検出し、SOME_LARGE_VARIABLE を検出するまで続行し、<0> まで停止します

すべてを選択することに注意してください

私の一時的な解決策は次のとおりです。

<0>[\s\S]{1,25}SOME_LARGE_VARIABLE[\s\S]*?<0>

これにより、選択が 25 文字未満に制限されます。25文字未満のチャンクが2つある可能性があるため、これはリスクが高いと思います


編集

言い換えれば、私は次のようになりたい:

<0>
   SOME_LARGE_VARIABLE
<0>

私が持っている唯一のことはSOME_LARGE_VARIABLE、すべてのチャンクが<0>

4

1 に答える 1

2

を使用する代わりに、次のように.*?使用できます。(?:(?!<0>).)*

<0>(?:(?!<0>).)*SOME_LARGE_VARIABLE(?:(?!<0>).)*<0>

ただし、文字列を分割して、<0>どの部分が一致するかを確認したほうがよい場合もありますSOME_LARGE_VARIABLE


式は次の 2 番目の「チャンク」と一致しないことに注意してください。

<0> SOME_LARGE_VARIABLE   will match
<0> SOME_LARGE_VARIABLE   will not match
<0>

2 番目<0>は式によって消費され、一致することができないためです。(分割アプローチにはこの問題はありません。)

これは、先読みを使用して修正できます。

<0>(?:(?!<0>).)*SOME_LARGE_VARIABLE(?:(?!<0>).)*(?=<0>)

.改行も一致させたい場合は(?s)、次のように式の先頭に追加します。

(?s)<0>(?:(?!<0>).)*SOME_LARGE_VARIABLE(?:(?!<0>).)*(?=<0>)
于 2012-06-19T23:36:59.857 に答える