MySQL正则表达式,用于查找正文中具有双斜线的内部URL

时间:2013-01-29 19:50:13

标签: php mysql sql regex

我们有一个使用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/

2 个答案:

答案 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的小提琴)。

或者您可以将正则表达式降低到'[^:]\/\/'并查找包含该正则表达式的帖子。