81,090
社区成员
发帖
与我相关
我的任务
分享
Iterator<String> iter = ... ;
StringBuffer newText = new StringBuffer();
while(m.find()){
m.appendReplacement( m.group().replace(m.group(1),iter.next()) );
}
m.appendTail();
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test3 {
public static void main(String[] args) {
String text = "范德萨 " +
"<IMG alt='' hspace=0 src='D:\\Documents and " +
"Settings\\zhengya\\桌面\\图片与hmtl资料\\jsmenu.gif'" +
" align=baseline border=0>" +
"222 " +
"<IMG alt='' hspace=0 src='D:\\Documents and " +
"Settings\\zhengya\\桌面\\图片与hmtl资料\\jsmenu.gif' " +
"align=baseline border=0>" +
"fdafdafda";
String regex = "<\\s*img[^>]+src\\s*=\\s*['\"]([^\"'>]+)['\"][^>]*>";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text);
while(m.find()) {
System.out.println(m.group(1));
}
}
}
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternTest {
public static void test1() {
ArrayList<String> imgs = new ArrayList<String>();
// create a Pattern
Pattern p = Pattern.compile("<img [^>]*>", Pattern.CASE_INSENSITIVE);
// create a Matcher and use the Matcher.group(int) method
String candidateString = "范德萨 <IMG alt='' hspace=0 src='D:\\Documents and Settings\\zhengya\\桌面\\图片与hmtl资料\\jsmenu.gif' align=baseline border=0>222 <IMG alt='' hspace=0 src='D:\\Documents and Settings\\zhengya\\桌面\\图片与hmtl资料\\jsmenu.gif' align=baseline border=0>fdafdafda";
// create a helpful index for the sake of output
Matcher matcher = p.matcher(candidateString);
// Find group number 0 of the first find
while (matcher.find()) {
String group = matcher.group(0);
imgs.add(group);
}
System.out.println(imgs);
}
public static void main(String[] args) {
test1();
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test3 {
public static void main(String[] args) {
String text = "范德萨 " + "<IMG alt='' hspace=0 src='D:\\Documents and "
+ "Settings\\zhengya\\桌面\\图片与hmtl资料\\jsmenu.gif'"
+ " align=baseline border=0>" + "222 "
+ "<IMG alt='' hspace=0 src='D:\\Documents and "
+ "Settings\\zhengya\\桌面\\图片与hmtl资料\\jsmenu.gif' "
+ "align=baseline border=0>" + "fdafdafda";
// 首先,你的表达式写错了
// 1,要从文本中提取数据的话 ^ $ 不能加
// 2,[^>].* 应改为 [^>]*? 因为 [^>] 只表示一个字符,你后面的 .* 才表示多个字符
// 3. [^>]* 是贪婪方式的匹配,即吃掉整个字符串再一个一个地吐出来,每吐一次匹配一次,匹配成功结束,不成功继续吐,以最多的字符进行匹配,呵呵比较贪心
// [^>]*? 是 lazy 方式匹配,从头开始一个一个吃掉字符,每吃一个字符匹配一次,匹配成功结束,不成功继续吃,以最少的字符进行匹配,比较懒
String regEx = "^ <\\s*img[^>].*>$";
Pattern p = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text);
// 这样的话只能匹配到一个,如有好多个就不能匹配了,应改为
// while(m.find())
boolean rs = m.find();
if (rs == true) {
System.out.println("Count::::" + m.groupCount());
// 你对 m.groupCount() 的理解是错误的
// 这个的结果是捕获组的数量,即表达式中捕获组 ( ) 的个数
// m.group(1) 表示获得第一组的内容,比如 表达式 ([0-9])([A-Z]),字符串是 $DAF 7A afdasf
// 表达式用 m.groupCount() 得到的是 2,因为有两对括号,
// 整个表达式可以提取到 7A 这个字符串,
// m.group(1) 表示第一对括号所匹配到的“7”,
// m.group(2) 表示第二对括号所匹配到的“A”
// 而 m.group() 或 m.group(0) 表示匹配表达式的整个字符串“7A”
for (int i = 1; i <= m.groupCount(); i++) {
System.out.println(m.group(i));
}
}
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test3 {
public static void main(String[] args) {
String text = "范德萨 " +
"<IMG alt='' hspace=0 src='D:\\Documents and " +
"Settings\\zhengya\\桌面\\图片与hmtl资料\\jsmenu.gif'" +
" align=baseline border=0>" +
"222 " +
"<IMG alt='' hspace=0 src='D:\\Documents and " +
"Settings\\zhengya\\桌面\\图片与hmtl资料\\jsmenu.gif' " +
"align=baseline border=0>" +
"fdafdafda";
String regex = "<\\s*img[^>]*?>";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text);
while(m.find()) {
System.out.println(m.group());
}
}
}