Pregunta

PostgreSQL \b apoyo?

Estoy intentando \bAB\b pero no coincide con nada, mientras que (\W|^)AB(\W|$) hace. Estos 2 expresiones son esencialmente los mismos, no son?

¿Fue útil?

Solución

PostgreSQL usa \m, \M, \y y \Y como límites de las palabras:

\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 

de expresiones regulares de restricción Escapes en el manual.

También hay [[:<:]] y [[:>:]], que coincide con el comienzo y el final de una palabra. De el manual de :

  

Hay dos casos especiales de expresiones con corchetes: el soporte de expresiones [[:<:]] y [[:>:]] son limitaciones, haciendo coincidir las cadenas vacías al principio y al final de una palabra, respectivamente. Una palabra se define como una secuencia de caracteres de palabra que ni está precedido ni siguieron por caracteres de palabra. Un carácter de palabra es un carácter alnum (como se define por ctype) o un subrayado. Esta es una extensión, compatible con, pero no especificada por POSIX 1003.2, y se debe utilizar con precaución en software destinado a ser portable a otros sistemas. Los escapes de restricción describen a continuación son por lo general preferible (que no más estándar son, pero son ciertamente más fácil de tipo).

Otros consejos

Un ejemplo sencillo

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

Esto corresponderá con AB ab ab - text text ab text AB text-ab-text text AB text ...

Pero hay que usar:

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

en caso de tener bandera standard_conforming_strings  establecido en OFF. Tenga en cuenta los dos barras Todo lo que pueda establecer de forma manual:.

set standard_conforming_strings=on;

A continuación:. select * from table_name where column ~* '\yAB\y'; debe trabajar

exacta búsqueda de palabras en el texto:

Yo estaba frente siguiente problema.

Yo quería buscar todos los contactos que tiene 'cto' como la palabra exacta en títulos, pero en los resultados era conseguir resultados con el título que tienen 'director' en ella, yo estaba usando siguiente consulta

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

También trató con whitspaces alrededor de comodín como '% cto%', que se iba a coincidir con el texto que contiene 'cto', resultados que se obtienen como 'vp, CTO y el pesebre', pero no resultados con título exacto como 'cto' .

Me quería tanto 'vp, CTO y el pesebre' y 'cto' en los resultados, pero no 'director' en los resultados

A continuación trabajó para mí

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

~   Matches regular expression, case sensitive
~*  Matches regular expression, case insensitive    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top