日期:2014-05-18  浏览次数:20916 次

用正则表达式怎么匹配一个时有时无的字符串
字符串如下:

"aaa123bbb"  "aaa234bbb" "aaa567bbb"  "345" "267"

我想取到字符串里的数字:123,234,567,345,267

数字前后的字符串不会变,但是可能没有,请问正则表达式咋写?

我写的正则表达式如下:
(aaa)?(.*?)(bbb)?

这种情况会把aaa和bbb也取出来,实际我的字符串比这个长很多,如果把aaa和bbb都取出来,会增大我的代码量,怎么样才能只取数字?

我试过aaa和bbb外面不加括号,就不会取出aaa和bbb,但是对没有字符串的情况(比如345和267)就不适用了

------解决方案--------------------
就是说,你就是想从一个字符串中取出连续的数字的部份喽:

public static void main(String[] args) {
String ss="aa123bb";

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher(ss);

while(m.find()){
System.out.println(m.group());
}
}


这样应该可以达到你想要的效果吧!
------解决方案--------------------
public class Aloha {
    public static void main(String[] args) {
        String[] strs = {"aaa123bbb", "aaa234bbb", "aaa567bbb", "345", "267"};
        String pattern = ".*?(\\d+).*";

        for (String str : strs) {
            System.out.println(str.replaceAll(pattern, "$1"));
        }
    }
}