Vous pouvez utiliser la pattern matching fonction dans Postgres.
Déterminez d'abord une régularité pour tout capturer jusqu'au quatrième >
personnage.
Pour commencer votre modèle, vous devez créer un sous-groupe qui capture non >
caractères, et un >
caractère :
([^>]*>)
Capturez ensuite cela quatre fois pour accéder à la quatrième instance de >
([^>]*>){4}
Ensuite, vous devrez regrouper cela dans un groupe afin que la correspondance ramène les quatre instances :
(([^>]*>){4})
et mettez un symbole de début de chaîne pour faire bonne mesure pour vous assurer qu'il ne correspond qu'à partir du début de la chaîne (pas au milieu):
^(([^>]*>){4})
Voici un exemple fonctionnel de regex101 !
Une fois que vous avez le modèle qui renverra ce que vous voulez dans le premier élément de groupe (que vous pouvez dire à l'expression régulière en ligne sur le panneau de droite), vous devez le sélectionner dans le SQL.
Dans Postgres, la fonction de sous-chaîne a une option pour utiliser un modèle regex pour extraire le texte de l'entrée en utilisant une instruction 'from' dans la sous-chaîne.
Pour finir, assemblez tout !
select substring(filter_type from '^(([^>]*>){4})')
from filter_table
Voir un sqlfiddle fonctionnel ici
Si vous souhaitez faire correspondre la chaîne entière chaque fois qu'il y a moins de quatre instances de >
, utilisez cette expression régulière :
^(([^>]*>){4}|.*)