日期:2014-05-20  浏览次数:20862 次

求高手解答 正则表达式 (急)

  我是正则表达式的菜鸟,求搭救:
   
有这样的模式:
  String s ="jdkjfd9dskjflkfdhjdhfkjlj";
  Matcher m =Pattern.compile("(.*)(f)(.*)").matcher(s);

然后我想要的是,
  字符串中一共有4个f,要求得到匹配第一个f的前面内容和后面内容,然后把后面内容作为继续要匹配的字符串继续循环进行。
 换句话说就是: 我想得到每次比较的第一个匹配成功的内容。 
  如:
  
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  public class TestRegx {

public static void main(String [] args)
{
String s ="jdkjfd9dskjflkfdhjdhfkjlj";
Matcher m =Pattern.compile("(.*)f(.*)").matcher(s);

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

}

}
  得到的是 :jdkjfd9dskjflkfdhjdh
  kjlj

  而我想得到的是: jdkj
  d9dskjflkfdhjdhfkjlj



 

------解决方案--------------------
改成
Java code
Matcher m =Pattern.compile("(.*?)f(.*)").matcher(s); //注意.*?和.*的区别

------解决方案--------------------
(?:(?!f).)+(?:(?=f)|$)
------解决方案--------------------

名字:<div\b(?:(?!\bclass\b).)++class\s*=\s*(["']?)area\1[^>]*>([^<]+)

地区:<div\b(?:(?!\bclass\b).)++class\s*=\s*(["']?)area\1[^>]*>([^<]+)

智力:<div\b(?:(?!\bclass\b).)++class\s*=\s*(["']?)power\1[^>]*>([^<]+)