mysql regexp用于匹配包含非锚标签的字段和带有模式的href属性

桑迪潘·纳特(Sandeepan Nath)

我试图从数据库中查找其字段具有非锚标签(其href属性以{clickurl}字符串开头)的所有行。例如,这-

<link foo="bar" href="{clickurl}http://wwww.google.com" ...

或这个(因为它有一个符合条件的非锚标签)-http://wwww.google.com“ ... ... http://wwww.google.com” ...

但这不是(因为它是锚标记)-http://wwww.google.com“ ...

到目前为止我做了什么

使用以下正则表达式,我可以获取链接标签具有以{clickurl}开头的href属性的所有记录-

SELECT bannerid FROM ox_banners WHERE htmltemplate REGEXP "<link[^>]*href\s*=\s*[\"'][^>]*{clickurl}(.*)[\"']"

但是,由于我不仅需要搜索链接标签,而且还需要搜索其他标签(锚标签除外),因此我将regexp修改为-

SELECT bannerid FROM ox_banners WHERE htmltemplate REGEXP "<[!a][^>]*href\s*=\s*[\"'][^>]*{clickurl}(.*)[\"']"

但这还会返回其中锚标记包含此模式的行。

更新

使用zx81的输入,我现在使用此表达式<[^a][^>]*href[[:space:]]*=[[:space:]]*[\"'][^>]*{clickurl}(.*)[\"'],在正常情况下,只有非锚定标记是匹配的,但是在如下情况下,当href属性位于PHP标记内的echo语句内的标记上时,它也匹配(不需要),因为实际上它是锚标记上的href-

<?php

$GLOBALS['test'] = '{clickurl}tel://test';

echo '<a href="{clickurl}test">Test</a>';

?>

我仍在寻找此修复程序。

zx81

尝试使用此正则表达式:

< *[^a][^>]+ *href *= *"{clickurl}

你快到了 看来您有一个小错字:您[!a]不是[^a]要意思“一个不是“ a”的字符”。

[^a][^>]几乎相同。我相信您知道这一点,但是在两种情况下,其^含义都是“ not”,所以[^>]任何不是>

可以使用以下方法代替*您不仅要允许空格字符而且允许其他种类的空格[[:space:]]*

感谢Tuga提醒我\s在MySQL中不起作用:它与文字“ s”匹配。我已经“隔开”了这个。:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章