4

wordpress を使用しているサイトがありますが、ある時点で、不適切なプラグインまたはユーザー エラーにより、サイト URL の後に二重スラッシュが追加されていることがわかりました (たとえば、http://example.site//category1/またはhttp://example.site/category1//category2/など.

これは機能しているようですが、十分な結果が得られていないようです。

SELECT id, post_content
FROM `wp_posts`
where post_content
regexp '(href="[^"]*[^:]\/\/[^"]*)'
and post_status  in('draft','publish')
order by id asc

これを行うより良い方法はありますか?http: の後に続く二重スラッシュに一致させたくないため、: の否定的な一致になります。

編集: 明確にするために、二重スラッシュのあるページに URL がハードコードされているが、http: の後の二重スラッシュと一致しないすべての投稿 (ワードプレスの投稿/ページの本文) を見つけたいと思います。

正規表現は次のものと一致する必要があります :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/

4

2 に答える 2

3

おそらく、このようなものが機能するでしょう。

SELECT *
FROM wp_posts
WHERE CASE WHEN instr(post_content,'http://') > 0 THEN 
  substring(post_content,7) regexp '\/\/'
ELSE
  post_content regexp '\/\/'
END

そして、これがSQLFiddleです。

幸運を。

于 2013-01-29T20:01:38.977 に答える
0

あなたが使用することができます:

regexp '(https?:\/\/|www\.)[^ ]*\/\/'

投稿にスペース以外の文字が含まれているhttp[s]://か、その後に続く場合、これは投稿に一致します。www.//

このSQLFiddleを参照してください(sgeddes のフィドルから適応)。

'[^:]\/\/'または、正規表現を に減らして、それを含む投稿を探すこともできます。

于 2013-01-29T20:20:06.523 に答える