2012-10-03 8 views
1

Je maintiens un ancien système qui a un problème d'enregistrement lorsqu'une chaîne contient un seul guillemet.Regex, Trouver un guillemet simple entouré d'un guillemet simple

Par exemple celles-ci échouent:

"update table set column2 = 'O'Connell', column3 = 'O'Riordon' where column1 = 1" 
"insert into table (column1, column2, column3, column4, column5, column6, column7) values('O'Reilley','state, postcode','',1,2,'O'Riordon')". 

Jusqu'à présent, je suis venu avec cette expression régulière de travail vbscript

([,=(]\s*'[^']*)'([^']*'\s*[,)\s]) 

Est-il possible d'écrire une expression régulière vbscript sans utiliser l'en-tête [(| = | \ s |,] et la bande-annonce [, |) | \ s]?

Merci.

EDIT: Correction de l'algèbre numérique à supprimer | de l'en-tête et de la remorque. Le regexp est utilisé comme suit

regexp.replace("string","$1''$2") 
+0

Outre le fait que la syntaxe correcte pour ces classes de caractère aurait été '[= (]' et '[ ,) \ s] ', et qu'il est curieux de savoir pourquoi ce dernier contient' \ s': Pourquoi voulez-vous les supprimer? Et s'ils sont partis, comment allez-vous dire où commence ou finit une partie? –

+0

@TimPietzcker Merci pour la correction, le \ s doit correspondre à l'instruction Update "Column3 = 'O'Riordon'". – Jules

+0

Exactement, donc si vous supprimez cette partie de la regex, comment sauriez-vous où commence ou finit une partie? Vous avez évidemment des données malformées, donc si quelqu'un peut dire quelles règles doivent être suivies pour sauver cela, c'est vous. –

Répondre

1

La seule façon que je peux penser à des œuvres que si la chaîne qui contient le guillemet simple ne contient jamais des espaces blancs. Dans ce cas, vous pouvez rechercher des

\B'([^'\s]*'[^'\s]*)'\B 

Explication:

\B  # Assert that there is no alphanumeric character before... 
'   # the opening quote 
(  # Match and capture... 
[^'\s]* # Any number of non-quote/non-whitespace characters 
'  # One quote 
[^'\s]* # Any number of non-quote/non-whitespace characters 
)   # End of capture group 1 
'   # Match the closing quote 
\B  # Assert that there is no alphanumeric character afterwards 
+0

Merci pour votre aide. – Jules

Questions connexes