2012-10-03 71 views
1

我正在维护一个旧系统,当一个字符串包含单引号时可以节省问题。正则表达式,找到单引号括起来的单引号

例如,这些将失败:

"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')". 

到目前为止,我想出了这个工作的VBScript正则表达式

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

是否可以写一个VBScript正则表达式,而不使用头[(| = | \ s |,]和预告片[,|)| \ s]?

谢谢。

编辑:修复发布的正则表达式删除|从头部和拖车。 的正则表达式的使用步骤如下

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

除了'[=(]'和'[ ,)\ s]',而且为什么后者包含'\ s'这令人困惑:你为什么要删除它们?如果他们走了,你怎么知道比赛开始或结束的地方? –

+0

@TimPietzcker感谢您的纠正,结尾\是匹配更新陈述“Column3 ='O'Riordon'”。 – Jules

+0

没错,所以如果你删除了正则表达式的那部分,你还知道比赛开始或结束的位置?你显然得到了不正确的数据,所以如果有人能够说出需要遵循哪些规则来挽救这个问题,那就是你。 –

回答

1

我能想到的作品仅包含单引号从未字符串中包含空格的唯一途径。在这种情况下,您可以搜索

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

说明:

\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

Thx为您提供帮助。 – Jules

相关问题