1

これは、URL の最後の 2 つの部分を照合する正規表現に関する投稿へのフォローアップの質問です。

組み込みの SQL 関数を使用して、正規表現を使用せずに同じタイプのパターン マッチを実現できるかどうか疑問に思っていました。特に、www.stackoverflow.com という文字列を com.stackoverflow.www に逆にしてから、連結を split('com.stackoverflow.www , '.', 1) || に適用する方法があるかどうかを考えていました。split('com.stackoverflow.www , '.', 2) これで完了ですが、これが可能かどうかはわかりません。

一般的な問題の説明は次のとおりです。

で区切られた最後の2つの文字列のみに一致する最適なSQL関数を見つけようとしています。URLで。

たとえば、www.stackoverflow.com の場合、stackoverflow.com と一致させたいだけです

私が抱えている問題は、たとえば、一部の文字列に多数のピリオドを含めることができることです

a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com

また、yimg.com のみを返す必要があります

私が扱っている一連の URL にはパス情報が含まれていないため、文字列の最後の部分は常に .org または .com またはその性質のものであると想定できます。

上記の条件下で、www.stackoverflow.com に対して実行すると stackoverflow.com を返し、a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com に対して実行すると yimg.com を返す SQL 関数はどれですか? SQL文字列操作関数だけのソリューションで正規表現を使用したくありませんでした。

4

1 に答える 1

9

8.3関数セットでできるようには見えませんhttp://www.postgresql.org/docs/8.3/static/functions-string.html

逆はありません - それは 9.1 に含まれています。それでできること:

select reverse(split_part(reverse(data), '.', 2)) || '.'
    || reverse(split_part(reverse(data), '.', 1))
from example;

http://sqlfiddle.com/#!1/25e43/2/0を参照

独自の逆を宣言できます: http://a-kretschmer.de/diverses.shtmlそして、この問題を解決します。

しかし、正規表現は簡単です...

于 2013-01-15T04:09:50.427 に答える