我试图从数据库中查找其字段具有非锚标签(其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>';
?>
这
我仍在寻找此修复程序。
尝试使用此正则表达式:
< *[^a][^>]+ *href *= *"{clickurl}
你快到了 看来您有一个小错字:您[!a]
不是[^a]
要意思“一个不是“ a”的字符”。
在[^a]
和[^>]
几乎相同。我相信您知道这一点,但是在两种情况下,其^
含义都是“ not”,所以[^>]
任何不是>
可以使用以下方法代替*
您不仅要允许空格字符而且允许其他种类的空格[[:space:]]*
感谢Tuga提醒我\s
在MySQL中不起作用:它与文字“ s”匹配。我已经“隔开”了这个。:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句