3

次のテキストがあるとします。

//[&][$][*]\n81723&8992%9892*2343%8734

私は取得する必要があります:

1. &
2. $
3. *
4. 81723&8992%9892*2343%8734

1 行目は、2 行目の数字を区切る区切り文字を定義します。未定義の区切り文字があります。

私はこの正規表現を作りました:

//(?:\[([^\]]+)\])+\n(.+)

しかし、得られるのは 2 グループだけです。1 つ目は最後の区切り文字で、2 つ目は数字を含む文字列です。試しましたが、すべての区切り記号を取得できませんでした。私は正規表現が苦手ですが、 (?:[([^]]+)])+ の反復ごとに最初のグループが上書きされていると思いますが、これを解決できません。

何か助けはありますか?

よろしく

ビクター

4

4 に答える 4

4

それはあなたが扱っているネストされたグループではなく、繰り返されるグループです。その通りです。キャプチャ グループが量指定子によって制御されている場合、反復ごとに再入力されるため、最終的な値は最後にキャプチャされたものになります。

あなたがやろうとしていることは、私がよく知っている正規表現のフレーバーでは不可能です。

より完全な説明は次のとおりです。Capturing Group の繰り返し vs. Repeated Group のキャプチャ

于 2011-08-26T22:42:38.363 に答える
1

「foofoofoo」のようなものを書いて(foo)+「foofoofoo」と照合して、3つのグループを取り戻すことは期待できません。開いているパレンごとに1つしか取得できません。つまり、作成したグループがさらに必要になるということです。

于 2011-08-26T22:35:59.500 に答える
1

(正規表現を使用して)実行できると私が思う最良のことは、次のようなものです。

(?:\[([^\]]+)\])?(?:\[([^\]]+)\])? #....etc....# \n(.+)
于 2011-08-26T22:12:42.293 に答える
-1

次の正規表現は JavaScript で機能します。

(\[.+\])(\[.+\])(\[.+\])\\n(.*)

これは、あなたの意志に価値があることを前提とし& $ *ています。

于 2011-08-26T22:32:07.437 に答える