2

この正規表現で文字列だけを生成したいacl。それ、どうやったら出来るの ?2013-否定演算子があっても、取得し続けます。

void testPattern()
     {
        Pattern pattern =
        Pattern.compile("^.*-");

        Matcher matcher =
        pattern.matcher("2013-acl");

        boolean found = false;
        while (matcher.find())
        {
            println matcher.group();

        }
      }
4

5 に答える 5

2

パターン"^.*-"は、ハイフンまでのみ入力と一致します。

を使用する"^.*-(.*)$"代わりにに変更します。matcher.group()matcher.group(1)

したがって、この変更されたパターンを使用し、同じ入力を使用すると、次のようになります。

  1. ^入力の先頭に一致します
  2. 最初.*の試合2013
  3. -一致します-
  4. 2番目.*の試合acl
  5. $入力の終わりに一致します

2番目の括弧は.*、キャプチャグループを作成します。キャプチャされたパターンは。で取得可能になりmatcher.group(1)ます。

于 2013-03-12T21:54:29.803 に答える
1

-これを使用して、 :の後にすべてを取得できます。(?<=-).*$

ただし、指摘されているように...単純に分割する-方が簡単です。

于 2013-03-12T21:54:34.257 に答える
1

正規表現を使用しないソリューション:

を使用して、 のStringBuilder前のすべてを削除します-

String string1 = "2013-acl";
StringBuilder b = new StringBuilder(string1);
b.delete(0, defaultBrowser.lastIndexOf('-') + 1);
string1 = b.toString();
System.out.println(string1);

そのプログラムは出力されるはずaclです。正規表現は必要ありません。

正規表現が必要な場合の解決策:

String string1 = "2013-acl";
Matcher matcher = Pattern.compile("(?<=-).*$").matcher(string1);
if (matcher.find()) System.out.println(matcher.group());

そのプログラムは出力されるはずaclです。

于 2013-03-12T21:52:17.623 に答える
0

acl正規表現としてだけやってみませんか?またはacl$、文字列の最後にある場合にのみaclと一致させたい場合

于 2013-03-12T21:55:32.503 に答える
0

^否定演算子ではなく、文字列演算子の先頭です。

末尾のみを一致させたい場合は、次を使用することをお勧めします。

"-(\w+)"

(Java ではバックスラッシュをエスケープすることを忘れないでください。)

$1次に、変数で一致するものを取得します。

これは、 Matcher.group()関数を使用して行うことができます。

Pattern pattern =
Pattern.compile("-(\\w+)");

Matcher matcher =
pattern.matcher("2013-acl");

matcher.find();
println matcher.group(1);
于 2013-03-12T21:51:13.757 に答える