请教一个正则表达式问题

lulin86 2012-02-04 02:49:37
Java中想通过 replacAll 完成字符串的替换;我是这样写的 replaceAll(regex,func("$1"));

问题是这样的: 运行到这里时,函数会先去调用func("$1"),以“$1”为String参数;
而我想要的效果是 先匹配,匹配出 $1 后 调用func("$1")返回一个新字符串,替换原来的字符串?

请问,要实现我的功能,该怎么做?
...全文
82 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cstur4 2012-02-04
  • 打赏
  • 举报
回复

Pattern p = Pattern.compile(" \\[\\d{1};(3\\d{1})m(.*) \\[m");
Matcher m = p.matcher("123a123b");
StringBuffer sb = new StringBuffer();
while(m.find())
{
String s = m.group();
m.appendReplacement(sb, "<font color=\""+CssUtil.getColor(s)+"\"</font>");
}
m.appendTail(sb);
System.out.println(sb.toString());
lulin86 2012-02-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ldh911 的回复:]
直接一句replaceAll做不到,你这个相当于是集合运算了。

用正则表达式创建个Pattern,然后得到Matcher,接着自己写个循环处理吧。
[/Quote]

的确如此,后来用 matcher.appendReplacement 循环来替换了
MiceRice 2012-02-04
  • 打赏
  • 举报
回复
直接一句replaceAll做不到,你这个相当于是集合运算了。

用正则表达式创建个Pattern,然后得到Matcher,接着自己写个循环处理吧。
lulin86 2012-02-04
  • 打赏
  • 举报
回复
问题是 这个函数 先去调用 CssUtil.getColor("$1")了 我想的是匹配出来之后 再调用getColor的。。。
lulin86 2012-02-04
  • 打赏
  • 举报
回复
func 其实就是 String func(String param);

replaceAll的第一个参数不是一个正则表达式吗, 表达式中()内匹配到的项是 $1,
我现在想把这个$1作为参数 传给 func(String), 返回一个String 来替换 匹配出的内容

saying.replaceAll(" \\[\\d{1};(3\\d{1})m(.*) \\[m","<font color="+CssUtil.getColor("$1")+"$2"+"</font>");

代码就是这么写的了。。
jiakai0419 2012-02-04
  • 打赏
  • 举报
回复
我没太看懂你的需求。

能说的再详细点吗?
zqfddqr 2012-02-04
  • 打赏
  • 举报
回复
func是什么啊

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧