帮我看看我的正则

g1092407 2011-08-18 01:02:57

private static final String STYLE_IMG = "url\\s*\\([\"\']?(.+)?[\"\']?\\)";
private static final Pattern PATTERN_FOR_STYLE_IMG = Pattern.compile(STYLE_IMG,Pattern.CASE_INSENSITIVE);
public static void main(String[] args){
String str = "background:url('css/bg.png')\n " +
" background:url('css/bg.png')\n"+
" background:url('css/bg.png') ";


StringBuffer newStyleStr = new StringBuffer();
Matcher imgMatcher = PATTERN_FOR_STYLE_IMG.matcher(str);
while(imgMatcher.find()){
System.out.println("123"); //这样能打印3次, 也就是3个URL都解析到了
}
//imgMatcher.appendTail(newStyleStr);






private static final String STYLE_IMG = "url\\s*\\([\"\']?(.+)?[\"\']?\\)";
private static final Pattern PATTERN_FOR_STYLE_IMG = Pattern.compile(STYLE_IMG,Pattern.CASE_INSENSITIVE);
public static void main(String[] args){
String str = "background:url('css/bg.png') background:url('css/bg.png') background:url('css/bg.png')";


StringBuffer newStyleStr = new StringBuffer();
Matcher imgMatcher = PATTERN_FOR_STYLE_IMG.matcher(str);
while(imgMatcher.find()){
System.out.println("123"); //这样只打印一次 也就是3个URL只解析到一个
//imgMatcher.appendReplacement(newStyleStr,"url(1)");
}
//imgMatcher.appendTail(newStyleStr);




高手们看看

...全文
90 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
剑神一笑 2011-08-18
  • 打赏
  • 举报
回复
"url\\s*\\([\"\']?([^\"\']+)?[\"\']?\\)"

中间的(.+)?会匹配所有字符
API对.的定义是这样的
. 任何字符(与行结束符可能匹配也可能不匹配)
所有\n没有匹配直接断掉
我吧(.+)? 改成([^\"\']+)? 不包含‘、“
所有找到下一个’会停住
飞跃颠峰 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 g1092407 的回复:]

background:url('css/bg.png') background:url('css/bg.png') background:url('css/bg.png')
贪婪模式会认为这是一个匹配
[/Quote]

没错,就是这样
g1092407 2011-08-18
  • 打赏
  • 举报
回复
background:url('css/bg.png') background:url('css/bg.png') background:url('css/bg.png')
贪婪模式会认为这是一个匹配
g1092407 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 alexandertech 的回复:]

"url\\s*\\([\"\']?(.+?)?[\"\']?\\)";

标红的地方加一个?,用reluctant模式
否则在贪婪模式下,右边的括号会一直匹配到最后一个Url的右括号,自然就只有一个匹配
第一段code之所以能找到3个匹配,是因为回车符\n不匹配".",所以截断了匹配,才刚好有3个匹配
[/Quote]

谢谢 高级正则不太会, 学习的还挺多的
TKD03072010 2011-08-18
  • 打赏
  • 举报
回复
期待高手解答 ...
飞跃颠峰 2011-08-18
  • 打赏
  • 举报
回复
"url\\s*\\([\"\']?(.+?)?[\"\']?\\)";

标红的地方加一个?,用reluctant模式
否则在贪婪模式下,右边的括号会一直匹配到最后一个Url的右括号,自然就只有一个匹配
第一段code之所以能找到3个匹配,是因为回车符\n不匹配".",所以截断了匹配,才刚好有3个匹配
若鱼1919 2011-08-18
  • 打赏
  • 举报
回复

private static final String STYLE_IMG = "url\\s*\\([\"\']?.+?[\"\']?\\)";
g1092407 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gavin_ts 的回复:]

看了。
[/Quote]
谢谢
我嘞个去 2011-08-18
  • 打赏
  • 举报
回复
看了。

62,614

社区成员

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

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