我是正则表达式的菜鸟,求搭救:
有这样的模式:
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[^>]*>([^<]+)