Question

Est-ce que PostgreSQL \b?

Je suis en train \bAB\b mais il ne correspond pas à quoi que ce soit, alors que le fait (\W|^)AB(\W|$). Ces 2 expressions sont essentiellement les mêmes, ne sont-ils?

Était-ce utile?

La solution

PostgreSQL utilise \m, \M, \y et \Y comme limites de mots:

\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 

Voir Expression régulière Constraint Escapes dans le manuel.

Il y a aussi [[:<:]] et [[:>:]], qui correspondent au début et à la fin d'un mot. De manuel:

  

Il existe deux cas particuliers d'expressions entre crochets: les expressions du support [[:<:]] et [[:>:]] sont contraintes, correspondant à des chaînes vides au début et à la fin d'un mot, respectivement. Un mot est défini comme une séquence de caractères de mots qui ne sont ni précédé, ni suivi de caractères de texte. Un caractère de mot est un caractère alnum (tel que défini par ctype) ou un trait de soulignement. Ceci est une extension compatible mais non spécifiée par POSIX 1003.2, et doit être utilisé avec prudence dans les logiciels destinés à être portables à d'autres systèmes. Les évasions de contraintes décrites ci-dessous sont généralement préférables (ils ne sont pas plus standard, mais sont certainement plus facile de taper).

Autres conseils

Un simple exemple

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

Cela correspond AB ab ab - text text ab text AB text-ab-text text AB text ...

Mais vous devez utiliser:

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

Si vous avez drapeau standard_conforming_strings  mis à OFF. Notez les doubles barres obliques Vous pouvez régler manuellement:.

set standard_conforming_strings=on;

Alors:. select * from table_name where column ~* '\yAB\y'; devrait fonctionner

recherche exacte des mots dans le texte:

Je faisais face à problème suivant.

Je voulais rechercher tous les contacts qui a « oi » comme mot exact dans les titres, mais dans les résultats était d'obtenir des résultats avec le titre ayant « directeur » dans, j'utilisais requête suivante

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

J'ai aussi essayé avec whitspaces autour de caractères génériques comme « % oi% », il commençait à faire correspondre avec le texte qui contient « oi », a obtenu des résultats comme « Vice-président, directeur technique et manger », mais pas de résultats avec le titre exact comme « oi » .

Je voulais à la fois « Vice-président, directeur technique et manger » et « oi » dans les résultats, mais pas « directeur » dans les résultats

Suite à travaillé pour moi

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

~   Matches regular expression, case sensitive
~*  Matches regular expression, case insensitive    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top