String类正则表达式难度

时间:2012-12-12 14:51:40

标签: java regex

我想获得包含字母数字字段

的astring的第一个字

EG。

字符串可以是'abc123abc'或'abc-123abc' 我只想要第一个'abc' 是否有任何方法可以在没有for循环的情况下获取它(我想使用正则表达式进行此操作,但我对正则表达式知之甚少)

实际上字符串模式就像

[A-Za-z]{2,5}[-]{0,1}[0-9]{1,15}[A-Za-z]{0,15}

我的目标是获得第一个字

5 个答案:

答案 0 :(得分:4)

将要捕获的表达式部分包装在捕获组中,然后使用匹配器的group(1)来访问它:

([A-Za-z]{2,5})-?[0-9]{1,15}[A-Za-z]{0,15}

第一组将捕捉到可选短划线的所有内容:

Pattern p = Pattern.compile("([A-Za-z]{2,5})-?[0-9]{1,15}[A-Za-z]{0,15}");
Matcher m = p.matcher("abc123abc");
if (m.find()) {
    System.out.println(m.group(1));
}

上面打印abclink to ideone)。

答案 1 :(得分:3)

尝试

System.out.println("abc-123abc".split("[-\\d]+")[0]);

输出

abc

答案 2 :(得分:1)

^[A-Za-z]+

将匹配字符串开头的ASCII字母。这就是你需要的吗?

答案 3 :(得分:0)

您可以获取^[A-Za-z]{2,5}的匹配文字。这将匹配所有首字母。

答案 4 :(得分:0)

String word = "abc-123abc".replaceFirst("[^a-zA-Z].*$", "");

这将删除第一个非a-z字符后的所有内容。您还可以使用替换捕获组。

String word = "abc-123abc".replaceFirst("^([a-zA-Z]+).*$", "$1");

String.replaceFirst()