Dans PostgreSQL, il existe un type de données BLOB appelé bytea. C'est juste un tableau d'octets. sont émisregex pour correspondre à postgresql bytea
littéraux bytea de la manière suivante:
'\\037\\213\\010\\010\\005`Us\\000\\0001.fp3\'\\223\\222%'
Voir PostgreSQL docs pour la définition complète du format.
J'essaye de construire un Perl regular expression qui correspondra à une telle chaîne.
Il devrait également correspondre littéraux standard chaîne SQL ANSI, comme 'Joe'
, 'Joe''s Mom'
, 'Fish Called ''Wendy'''
Il devrait également correspondre à la variante échappé antislash: 'Joe\'s Mom'
,.
La première approche (illustrée ci-dessous) ne fonctionne que pour certaines représentations bytea.
s{ ' # Opening apostrophe
(?: # Start group
[^\\\'] # Anything but a backslash or an apostrophe
| # or
\\ . # Backslash and anything
| # or
\'\' # Double apostrophe
)* # End of group
' # Closing apostrophe
}{LITERAL_REPLACED}xgo;
Pour les autres (les plus longues, avec de nombreux se sont échappés apostrophes, Perl donne cet avertissement:
limite de récursion régulière complexe sous-expression (32766) a dépassé à la ligne 33 ./sqa.pl, <> ligne 1.
Je suis à la recherche d'un meilleur (mais toujours regex-base) solution, il faut probablement une alchimie regex (en évitant tout et des backreferences).
Pourquoi ce wiki communautaire? – kennytm
Pour commencer, placez [^ \\\ '] 'dans [^ \\'] +' pour qu'il puisse avancer plus d'un caractère à la fois dans le "cas habituel".(De plus cette troisième barre oblique inverse n'est pas nécessaire :) – hobbs