我们有一个使用wordpress的网站,我们发现在某些时候,错误的插件或用户错误在siteurl之后添加了双斜杠(例如,http://example.site//category1/
或http://example.site/category1//category2/
等。< / p>
这似乎有效,但看起来效果不够好。
SELECT id, post_content
FROM `wp_posts`
where post_content
regexp '(href="[^"]*[^:]\/\/[^"]*)'
and post_status in('draft','publish')
order by id asc
有更好的方法吗?我不希望它在http:之后的双斜杠上匹配,因此在:。上的负匹配。
编辑:为了澄清,我想查找所有帖子(wordpress帖子/页面的正文)有一个硬编码到具有双斜线的页面的URL,但在http后面的双斜线上不匹配:
Regexp应匹配以下内容:
http://example.site//category1/
或http://example.site/category1//category2/
甚至http://example.site/category1/category2//
或example.site/category1//category2/
但是不应该匹配以下内容:
http://example.site/category1/
或http://example.site/category1/category2/
答案 0 :(得分:3)
也许这样的事情会起作用。
SELECT *
FROM wp_posts
WHERE CASE WHEN instr(post_content,'http://') > 0 THEN
substring(post_content,7) regexp '\/\/'
ELSE
post_content regexp '\/\/'
END
这是SQL Fiddle。
祝你好运。答案 1 :(得分:0)
您可以使用:
regexp '(https?:\/\/|www\.)[^ ]*\/\/'
如果帖子包含http[s]://
或www.
,后跟其中包含//
的非空格字符,则会匹配该帖子。
见SQLFiddle(改编自sgeddes的小提琴)。
或者您可以将正则表达式降低到'[^:]\/\/'
并查找包含该正则表达式的帖子。