php匹配问题

2019-03-25 13:42|来源: 网路

文章内容:我是中国人,我喜欢上javaeye
填写的标签:中国
显示的效果是:我是 <a href="china.com">中国 </a>人,我喜欢上javaeye
在显示的时候,我用正则表达式进行匹配是可以实现,但是如果文章中有图片的话,如 <img src="photo.jpg" alt="这是一张中国风景图片" />,在匹配的时候也将alt里的“中国”也加上链接,结果图片不能正常显示
请教各位,如何能够不将图片进行匹配,这个正则应该怎么写,或者有什么其他的方法可以实现
问题补充:
如果将
$content = '我爱<img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="1中国2" >3中国
换成
$content = '我爱<img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="1中国2右灯中国" >3中国
结果alt中第一个“中国”可以转换成原来的,但第二个就不能转换,变成
我爱<img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="1中国2右灯<a href="china.com">中国</a>" >3中国
为什么?

相关问答

更多
  • 尝试一下这个(preg_replace测试可用) /\<(.*)\>.*\<\/\1\>/
  • 匹配中文字符的正则表达式: [\\u4e00-\\u9fa5]匹配双字节字符(包括汉字在内):[^\\x00-\\xff]应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){return this.replace([^\\x00-\\xff]/g,\"aa\").length;}匹配空行的正则表达式:\\n[\\s| ]*\\r匹配HTML标记的正则表达式:/.*|/匹配首尾空格的正则表达式:(^\\s*)|(\\s*$)
  • 你这里要求了密码长度为6-18位,/[\s\S]+/只能匹配任意字符,且能偶匹配的字符远超出你给的限制。 建议你在匹配密码前,先对密码字符串的长度进行检验,然后再对密码字符的合法性进行判断, 这里合法性的判断又有很多,如必须以字母开头、数字开头、数字结尾等等; 下面写了一个正则表达式只能匹配当且仅包含由字母、数字、特殊字符!@#$%^&*_组成的密码字符串。 如下: [-\da-zA-Z!@#$%^&*_]* 更严格的判断,比如开头^,结尾$的判断,必须包含一个字母一个数字等等,根据自己的需要进行更改完善
  • 我正在使用“匹配”而不是“正则表达式” $params = [ 'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'regexp' => [ 'title' => '.*abc.*' ] ] ] ]; I was using 'match' instead of 'regex' ...
  • 您可以为此使用零宽度断言 {(?
  • 我认为"\[php\](.*?)\[\/php\]"会起作用。 编辑:您可能需要也可能不需要双引号 - 不确定您最终如何使用正则表达式字符串。 I think "\[php\](.*?)\[\/php\]" would do the trick. Edit: you may or may not need the double quotes-- not sure how you're ultimately using the regex string.
  • $inBoth = array_intersect(preg_split('/,\s*/', $array), $keyword); CodePad 。 get_meta_tags()只是将关键字作为字符串返回,因此我们需要将其拆分为数组。 我们考虑到人们在之后添加空格,换行符或制表符。 你也可以跳过正则表达式,然后爆炸,然后使用array_map('trim', $array) 。 如果不这样做,你就会冒"art"和" art"不匹配的风险。 更新 数组匹配可以不区分大小写吗? 如果你不介意生成的数组是 ...
  • 使用非捕获组: /(?:date|after|latest) rest of the regex(p)?/ Use non capture group: /(?:date|after|latest) rest of the regex(p)?/
  • 你可以让它变得懒惰: .*? ,每次都不应该匹配任何东西。 此外,您不必拥有这么多捕获组。 您甚至在命名捕获组中具有编号的捕获组。 这是我写表达式的方式: ^/?(?P.*?|home)/(?P.*?|test)/?$ 这保留了两个命名的捕获组,但是除去了嵌套的编号捕获组以及非必需的非捕获组。 You could make it lazy: .*?, that should match nothing every time. Also, you don't have ...
  • 稍微混淆了这个问题 - 如果我有代表,我会把它放在评论中。 这是否足够 preg_match_all('/\'keep.php\?casuser=(\d*)/i', $result, $matches2); 还是重要的是他们也有相关的风格? 如果是这样尝试: preg_match_all('/\'keep.php\?casuser=(\d*).*?style=\"color:#ffca3e/i', $result, $matches2); Slightly confused by the questio ...