当前位置:编程学习 > JAVA >>

java正则

如何在一个字符串中 查询 符合 我定的一个正则表达式 的串。

eg:  
String s = 颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891;
如何把
“规格:3726,3727,3729,3730,3731” 这个串抓出来?


   --------------------编程问答--------------------

public static void main(String[] args) {
String s = "颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891";
Matcher m = Pattern.compile("规格:.*?(?=\\|)").matcher(s);
if(m.find()){
System.out.println(m.group());
}
}
--------------------编程问答--------------------
public static String findFirst(String str) {
    int start = str.indexOf("|规格:") + 1;
    if(start > 0) {
        int end = str.indexOf("|", start);
        return (end > -1) ? str.substring(start, end) : str.substring(start);
    }
    return null;
}
--------------------编程问答--------------------
引用 1 楼 goldenfish1919 的回复:
Java code

public static void main(String[] args) {
        String s = "颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891";
        Matcher m = Pattern.compile("规格:.*?(?=\\|)").matcher(s);
……
--------------------编程问答--------------------
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws IOException {
String s = "颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891";
String[] str = s.split("\\|\\*\\|");
System.out.println(str[1]);

}
}

这样比较简单。。 --------------------编程问答-------------------- import java.util.regex.*;
public class Tet {
public static void main(String[]args){
Pattern p=Pattern.compile("规格.[\\d{4,5}.]+\\d{2,4}+");
String s = "颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891";
Matcher m=p.matcher(s);
while(m.find()){//在原来的字符串中寻找符合条件的字串
System.out.println(m.group());//分组打印
}


}
}
--------------------编程问答-------------------- import java.util.regex.*;
public class Tet {
public static void main(String[]args){
Pattern p=Pattern.compile("规格.[\\d{4,5}.]+\\d{2,4}+");
String s = "颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891";
Matcher m=p.matcher(s);
while(m.find()){
System.out.println(m.group());
}


}
}
--------------------编程问答--------------------
引用 5 楼 lanjingling539 的回复:
import java.util.regex.*;
public class Tet {
public static void main(String[]args){
Pattern p=Pattern.compile("规格.[\\d{4,5}.]+\\d{2,4}+");
String s = "颜色:28796,28809,42|*|规格:3726,3727,3729,3730,37……

这哥们说得好 --------------------编程问答-------------------- 好多强人。。 --------------------编程问答-------------------- String str="[\u4e00-\u9fa5]+[:][\\d,]+";
Pattern p =Pattern.compile(str);
Matcher m = p.matcher("颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891");
while(m.find()) {

System.out.println(m.group());
} --------------------编程问答-------------------- 感谢各位,来晚了, 我竟然忘了Pattern!
参考了大家的意见,最后我是这么做的:



String attrName="规格";
String allAttrs="颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891";

Pattern p = Pattern.compile(attrName+":(\\d+,?)+\\d?");
Matcher m = p.matcher(allAttrs);
if(m.find()){
list = new ArrayList<Long>();
String group = m.group();
group = group.replaceAll(attrName+":", "");
String[] splits = group.split(",");
for(String s : splits) {
list.add(Long.parseLong(s));
}
}

功能可以 完成。但在最后有一个动作是替换掉"规格:",总觉得应该有办法可以在查找出结果时可以忽略掉,只拿到“3726,3727,3729,3730,3731”这个结果,那就完美了!不知道大家怎么想,如果没有想法,那我就结帖. --------------------编程问答--------------------

public static void main(String[] args) {
String s = "颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891";
Matcher m = Pattern.compile("规格:(.*?)(?=\\|)").matcher(s);
if (m.find()) {
String strArr[] = m.group(1).split(",");
}
}
--------------------编程问答-------------------- 楼上正解。 --------------------编程问答--------------------
		String s = "颜色:28796,28809,42|*|规格:3726,3727,3729,3730,3731|*|型号:28891";
Pattern pattern = Pattern.compile("\\|([^\\*]+?)\\|");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,