1

次のテキストがあります。

my-widget{
  color: #{mycolors.getColors(1)}
}
...
my-tridget{
  color: #{mycolors.getColors(2)}
  ...
}
...

区切り文字が #{mycolors.getColors()} で、前の区切り文字と現在の区切り文字の間のテキストが保存されるペアでテキストを分割したい。たとえば、そのようなペアの場合:

ペア 1: text: my-widget{ color: number: 1

ペア 2: text: } ... my-tridget{ color: number: 2

今まで使っていたもの、

 Pattern p = Pattern.compile("(.*)#\\{mycolors.getColor\\(([0-9])\\)\\}", Pattern.CASE_INSENSITIVE|Pattern.MULTILINE);
    Matcher m = p.matcher(data);

 while (m.find){
     String number = m.group(2).toLowerCase().trim();
     String text = m.group(1);          
 }

ただし、番号とテキストは次のようになります。

テキスト: 色:番号: 1

テキスト: 色:数: 2

したがって、テキストは数行にまたがりません。どうすればこれを達成できますか? (Pattern.MULTILINEに加えてPattern.DOTALLは私を助けませんでした)

4

1 に答える 1

1

あなたが犯しているいくつかの間違い:

  1. Pattern.DOTALL複数行にわたってテキストを一致させるには、代わりに使用する必要がありますPattern.MULTILINE
  2. .*非貪欲にする代わりに.*?
  3. テキストには文字列getColorsがありますがgetColor、正規表現にはあります

次の正規表現パターンがうまくいくはずです:

Pattern p = Pattern.compile("(.*?)#\\{mycolors.getColors\\((\\d+)\\)\\}", 
                            Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
于 2013-09-16T12:41:06.163 に答える