0

で囲まれた文字列を含むテキストがあります#[ ]。これらの文字列を照合して、内部の文字列を見つける必要があります。

私のテキスト例:

Lorem ipsum dolor #[This is my first string.] sit amet, consectetur elit,
sed do eiusmod tempor incididunt #[This is my second string?] ut et dolore magna.

このテキストでは、2 つの一致が必要です。

#[This is my first string.]
#[This is my second string?]

今、正規表現を書きました:

\#\[([\w\s\W]*)\]

\Wドット、クエスチョン マーク、その他の文字以外の文字を含めたいので、追加しました。now #[and]が含まれているため、テキストに一致するものが1つしかないため、これにより問題が発生します。

#[This is my first string.] sit amet, consectetur elit,
sed do eiusmod tempor incididunt #[This is my second string?]

もちろん、 の最初の出現#[と最後の出現に一致し]ます。これを解決する方法は?#文字列に, [andを含めないことを受け入れることができ]ますが、可能であれば、他のすべての文字以外の文字を含める必要があります。

4

2 に答える 2

2

あなたの問題は ではなく、\Wです*。は*貪欲で、可能な限り長い文字列に一致します。したがって、最初[と最後が一致し]、その間のすべてが取得されます。

これを試して:

\#\[([\w\s\W]*?)\]

実際、次のように単純化できるはずです。

\#\[(.*?)\]

?修飾子 (*または)の後は、最小限の一致+を強制します。つまり貪欲ではない。

于 2013-02-11T14:05:31.023 に答える
0

あなたの問題はそれ\Wも一致することです]

これを修正する簡単な方法は次のとおりです。できるだけ[多くの非文字を一致させた後:]

(#\[[^\]]*\])

これでうまくいくはずです。

于 2013-02-11T14:13:35.390 に答える