PostgreSQL Regexの言葉の境界線?
-
26-09-2019 - |
質問
はPostgreSQLの支援 \b
?
ようにしている \bAB\b
も一致しないものは (\W|^)AB(\W|$)
います。これらの2つの表現は基本的に同じもバッチリ決まっているでしょ。
解決
PostgreSQLの単語の境界として\m
、\M
、\y
と\Y
を使用します:
\m matches only at the beginning of a word
\M matches only at the end of a word
\y matches only at the beginning or end of a word
\Y matches only at a point that is not the beginning or end of a word
正規表現制約エスケープを参照してくださいマニュアルのます。
また、単語の先頭と末尾にマッチ[[:<:]]
と[[:>:]]
、があります。 から手動に:
ブラケット式の2つの特殊なケースがあります。ブラケット式の
[[:<:]]
と[[:>:]]
は、それぞれ単語の先頭と末尾の空文字列にマッチする、制約されています。言葉はどちらも先行していないもの単語文字が続いている単語文字のシーケンスとして定義されます。単語文字はalnum文字(ctype関数によって定義される)又はアンダーです。これは、POSIX 1003.2で指定されたとの互換性はなく、拡張、であり、他のシステムへの移植を意図したソフトウェアでは注意して使用してください。制約エスケープは、後述する(それらはもはや標準であるが、確かにタイプするのが容易である)は、通常、好ましいです。
他のヒント
簡単な例
select * from table_name where column ~* '\yAB\y';
このまま試合 AB
ab
ab - text
text ab
text AB
text-ab-text
text AB text
...
して使用
select * from sometable where name ~* '\\yAB\\y';
いただいた場合 standard_conforming_strings
旗
設定 OFF
.注意 ダブルスラッシュ.
きに手動で設定:
set standard_conforming_strings=on;
その後:select * from table_name where column ~* '\yAB\y';
べきます。
テキストの正確なワード検索:
私は次のような問題に直面していた。
私はタイトルに正確な言葉として「CTO」を持っているすべての連絡先を検索したかったが、結果にはその中のタイトル持つ「ディレクター」との結果を得ていた、私は、クエリ
以下の使用していましたselect * from contacts where title ilike '%cto%';
私はまた、ワイルドカードの周りwhitspacesと試みたとして「%CTO%」、それは「CTO」、「VP、CTOおよびマネージャ」のようになった結果が、「CTO」などの正確なタイトルではない結果が含まれたテキストと一致なっていました。
私は結果で「監督の」「VP、CTOおよびマネージャ」と結果の「CTO」の両方を望んではなく、
私のために働いた次の
select * from contacts where title ~* '\\ycto\\y';
~ Matches regular expression, case sensitive
~* Matches regular expression, case insensitive