72

PostgreSQL はサポートしています\bか?

私は試し\bAB\bていますが、何にも一致しませんが、一致(\W|^)AB(\W|$)します。この 2 つの表現は本質的に同じですよね。

4

3 に答える 3

96

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 

マニュアルの正規表現の制約のエスケープを参照してください。

単語の先頭と末尾に一致するandも[[:<:]]あります。マニュアル[[:>:]]から:

ブラケット式には 2 つの特殊なケースがあります。ブラケット式[[:<:]][[:>:]]は制約であり、それぞれ単語の先頭と末尾の空の文字列に一致します。単語は、単語文字が前後にない一連の単語文字として定義されます。単語文字は、alnum 文字 (ctype で定義) またはアンダースコアです。これは拡張機能であり、POSIX 1003.2 と互換性がありますが、指定されていません。他のシステムへの移植を目的としたソフトウェアでは注意して使用する必要があります。以下に説明する制約エスケープは、通常は推奨されます (これらはもはや標準ではありませんが、入力するのは確かに簡単です)。

于 2010-09-29T20:46:00.623 に答える
17

簡単な例

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';動作するはずです。

于 2015-01-03T08:55:18.060 に答える
5

テキスト内の正確な単語検索:

次の問題に直面していました。

タイトルに正確な単語として「cto」が含まれるすべての連絡先を検索したかったのですが、結果に「ディレクター」が含まれるタイトルの結果が得られたので、次のクエリを使用していました

select * from contacts where title ilike '%cto%';

また、ワイルドカードの周りの空白を「% cto %」として試してみました。「cto」を含むテキストと一致し、「vp、cto、manger」などの結果が得られましたが、正確なタイトルが「cto」の結果にはなりませんでした。

結果に「vp、cto、manger」と「cto」の両方が必要でしたが、結果に「director」は必要ありませんでした

以下は私のために働いた

select * from contacts where title ~* '\\ycto\\y';

~   Matches regular expression, case sensitive
~*  Matches regular expression, case insensitive    
于 2015-04-22T13:15:48.713 に答える