$str='<div>接口了发的撒了http://www.aaa.com/software_zone/2013/0903/2174529.shtml看见了飞洒<img src="http://www.aaa.com/itask_static/expression/t4/appstyle/expression/ext/normal/0b/tootha_org.gif" class="img_emotion"></div>';

需求是只匹配网址而不匹配图片的网址

preg_replace("/((?<!\")http:\/\/[A-Za-z0-9\.\-]+(\/[A-Za-z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*)/", '<a>\1</a>', $str)

用到了

  • 引用 - 使用 ()来标识需要引用的内容,并用\1引用.
  • 断言 - (?<!\") 匹配前面不是"的内容.