Domanda

Il supporto PostgreSQL \b?

Sto cercando \bAB\b ma non corrisponde a nulla, mentre (\W|^)AB(\W|$) fa. Questi 2 espressioni sono essenzialmente la stessa, non è vero?

È stato utile?

Soluzione

PostgreSQL utilizza \m, \M, \y e \Y come confini di parola:

\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 

Regular Expression vincolo Escapes nel manuale.

C'è anche [[:<:]] e [[:>:]], che corrisponde all'inizio e alla fine di una parola. Da manuale :

  

Ci sono due casi particolari di espressioni fra parentesi quadre: l'espressioni fra parentesi quadre [[:<:]] e [[:>:]] sono vincoli, corrispondenti rispettivamente stringhe vuote all'inizio e alla fine di una parola. Una parola è definita come una sequenza di caratteri di parola che non è né preceduta né seguita da caratteri alfanumerici. Un carattere di parola è un carattere alnum (come definito dalla ctype) o una sottolineatura. Questa è un'estensione, compatibile con, ma non specificato da POSIX 1003.2, e deve essere usato con cautela in software per essere portabili ad altri sistemi. Le fughe di vincolo descritti di seguito sono generalmente preferibili (essi non sono più standard, ma sono certamente più facile tipo).

Altri suggerimenti

Un semplice esempio

select * from table_name where column ~* '\yAB\y';

Questa corrisponderà AB ab ab - text text ab text AB text-ab-text text AB text ...

Ma bisogna usare:

select * from sometable where name ~* '\\yAB\\y';

nel caso in cui si dispone di bandiera standard_conforming_strings  impostato su OFF. Nota doppie barre
È possibile impostare manualmente:.

set standard_conforming_strings=on;

Quindi:. select * from table_name where column ~* '\yAB\y'; dovrebbe funzionare

ricerca di parola esatta nel testo:

Stavo affrontando seguente problema.

Ho voluto ricercare tutti i contatti che ha 'CTO' come parola esatta in titoli, ma nei risultati era ottenere risultati con il titolo che hanno 'direttore' in esso, stavo usando seguente query

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

Ho provato anche con whitspaces intorno jolly come '% CTO%', si stava facendo abbinato con il testo che contiene 'CTO', i risultati ottenuto come 'vp, CTO e manger', ma non i risultati con titolo esatto come 'cto' .

ho voluto sia 'vp, CTO e manger' e 'CTO' nei risultati, ma non e 'il regista' nei risultati

In seguito ha lavorato per me

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

~   Matches regular expression, case sensitive
~*  Matches regular expression, case insensitive    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top