我有一个网站,用户可以使用自己的内容创建子网站。它就像wix.com。可以在内容中创建链接,并且一些用户滥用此功能来链接到恶意软件站点。
用户的内容存储在一个名为pages
的表格中的MySQL数据库中,位于content
列内。
我想找到每个包含以" http"开头的字符串的内容。但不要包含我的两个域之一(让我们说它们是mysite.com
和another.com
)。这会有所帮助,因为几乎每个内容都包含指向这两个网站的链接,但很少包含指向其他网站的链接。
例如:我想抓住http://badsite.com
,但我不想抓住http://subdomain.mysite.com/page1
或http://name.another.com/?page=products
此外,即使文本中还包含指向我的某个域的链接(例如http://badsite.com
),我也希望抓住http://sub.mysite.com/
。因此,下面的查询无效:
select *
from pages
where content like '%http%'
and content not like '%mysite.com%'
and content not like '%another.com%'
我想要捕获的文字示例:
Lorem ipsum dolor sit amet,consectetur adipiscing elit,<一个 HREF =" http://sub.mysite.com/ "> SED< / A>做eiusmod<一个 HREF =" http://badsite.com "> tempor< / A> incididunt ut labore et dolore magna aliqua。
我不想捕捉的文字示例:
Lorem ipsum dolor sit amet,consectetur adipiscing elit,<一个 HREF =" http://sub.mysite.com/ "> SED< / A>做eiusmod<一个 HREF =" http://prefix.another.com/page2 "> tempor< / A> incididunt ut labore et dolore magna aliqua。
简而言之,我希望找到所有链接到mysite.com或another.com以外的任何域名的网页。
我认为我必须使用正则表达式,但我不知道该怎么做。
答案 0 :(得分:0)
请查看此部分:https://dev.mysql.com/doc/refman/5.7/en/regexp.html
对于条件组合,请考虑使用逻辑运算的括号,它们会帮助您表达您想要的任何内容,例如:
(cond1 OR cond2) AND NOT cond3 AND cond 4
...等等,等等