0

英数字と「-」を比較する正規表現が必要です。下の文字列から 123ABC-4CDE56 を返します。以下のコードを試しましたが、うまくいきません。

            String regex = "^/[a-zA-Z0-9-_]+$";

        Pattern pattern = Pattern.compile(regex);

        String str = "/something/123ABC-4CDE56/somethingmoretobeignored";

        Matcher matcher = pattern.matcher(str);

        if(matcher.reset(str).find()){
            System.out.println(matcher.group(1));
        }
4

1 に答える 1

1

^$は、それぞれ行頭と行末を意味します。そう:

String regex = "/[a-zA-Z0-9-_]+/";

また、あなたが言っているよう.group(1)に、これは括弧内の最初のものを返しますが、()どれもありません。したがって、正規表現を次のように変更します。

String regex = "/([-a-zA-Z0-9_]+)/";

文字列の最初と最後を正しく一致させるには:

String regex = "(^|/)([-a-zA-Z0-9_]+)(/|$)";

を使用する必要があることを覚えておいてください.group(2)

またsomething、 とsomethingmoretobeignoredは両方とも英数字です。小文字は無視してください:

String regex = "(^|/)([A-Z0-9_]+)(/|$)";
于 2013-03-13T06:03:49.470 に答える