PostgreSQL supporta \b
?Confini Word Regex PostgreSQL?
Sto cercando \bAB\b
ma non corrisponde a nulla, mentre lo fa (\W|^)AB(\W|$)
. Queste 2 espressioni sono essenzialmente le stesse, no?
PostgreSQL supporta \b
?Confini Word Regex PostgreSQL?
Sto cercando \bAB\b
ma non corrisponde a nulla, mentre lo fa (\W|^)AB(\W|$)
. Queste 2 espressioni sono essenzialmente le stesse, no?
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
Vedi Regular Expression Constraint Escapes nel manuale.
C'è anche [[:<:]]
e [[:>:]]
, che corrispondono all'inizio e alla fine di una parola. Da the manual:
Ci sono due casi particolari di espressioni fra parentesi quadre: la staffa Espressioni
[[:<:]]
e[[:>:]]
sono vincoli, corrispondenti rispettivamente stringhe vuote all'inizio e alla fine di una parola. Una parola è definita come una sequenza di caratteri di parole che non è né preceduta né seguita da caratteri di parole. Un carattere word è un carattere alnum (come definito da ctype) o un carattere di sottolineatura. Questa è un'estensione, compatibile ma non specificata da POSIX 1003.2, e dovrebbe essere usata con cautela in un software destinato a essere trasferibile su altri sistemi. Le fughe di vincoli descritte di seguito sono generalmente preferibili (non sono più standard, ma sono certamente più facili da scrivere).
Un semplice esempio
select * from table_name where column ~* '\yAB\y';
questo funzionerà in 9.1 e matche AB
ab
ab - text
text ab
text AB
text-ab-text
text AB text
...
Ma devi essere Caref ul in 9.2. è necessario utilizzare:
select * from sometable where name ~* '\\yAB\\y';
Nota i doppie barre.
Nel 9.2 il standard_conforming_strings
è impostato su OFF
da default.But è possibile impostare manualmente:
set standard_conforming_strings=on;
Poi: select * from table_name where column ~* '\yAB\y';
dovrebbe funzionare.
Uso Postgres 9.3.10 e 'value ~ * '\ yAB \ y'' funziona bene. La tua nota 9.2 è specifica? –
ricerca di parola esatta nel testo:
Stavo affrontando seguente problema.
ho voluto cercare tutti i contatti che ha 'CTO' come parola esatta in titoli, ma nei risultati era ottenere risultati con il titolo che hanno 'direttore' in essa, stavo usando seguente query
select * from contacts where title ilike '%cto%';
anche io provato con whitspaces attorno a caratteri jolly come '% cto%', è stato abbinato al testo che contiene 'cto', ha ottenuto risultati come 'vp, cto e manger', ma non ha 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
Quando si abbina la frase 'ILIKE '% cto%', è sufficiente aggiungere spazi attorno alla frase: '' '|| frase || '' ILIKE '% cto%' '. Funzionerà per titolo come 'cto'. Grazie, perché la tua idea mi aiuta a trovare questa soluzione: https://stackoverflow.com/questions/18080104/ilike-match-word-boundaries-postgresql-9/47120301#47120301 –
Nizza! Grazie! Penso di aver trovato quella pagina nelle mie ricerche su Google, ma non penso di averlo fatto scorrere abbastanza lontano :) – mpen