Ruby正则表达式:排除撇号,但如果它被转义则包括它

时间:2012-11-30 11:36:27

标签: ruby regex

我正在尝试编写一个ruby正则表达式,以便从长字符串中提取一些数据(HTML源代码)。

从下面的字符串我想保留四个数字(1,11,30,90)和第一个单引号字符串(blablabla)

AjouterRDV(1, 11, 30, 90, 'blablabla', '123' ... (it goes on) );

我的正则表达式目前适用于上面的示例,但是当字符串包含转义的撇号时失败,例如

AjouterRDV(1, 11, 30, 90, 'it\'s failing!', '123' ... (it goes on) );

这是我的正则表达式,有两个示例字符串(一个传递,另一个失败) - Rubular

3 个答案:

答案 0 :(得分:3)

一种更简单的方法(假设您不需要匹配捕获的任何内容):

AjouterRDV\((\d+),(\d+),(\d+),(\d+),'(.+?)',

请参阅Rubular example

答案 1 :(得分:2)

你可以试试这个: -

/AjouterRDV\( (\d+), (\d+), (\d+), (\d+), '((?:(?<=\\)[']|[^'])*)', .* \);$/ix

'((?:(?<=\\)[']|[^'])*)'匹配前面有'的{​​{1}},或匹配\以外的任何字符

答案 2 :(得分:1)

嗯,有人只是评论,但似乎他删除了它。他的建议是

AjouterRDV\( (\d+), (\d+), (\d+), (\d+), '((?<=\\)[']|[^'])*', .* \);$

几乎可以工作,除了它没有正确捕获第5组。为此你需要:

AjouterRDV\( (\d+), (\d+), (\d+), (\d+), '((?:(?<=\\)[']|[^'])*)', .* \);$

将他的“外部”组转换为非捕获组,然后在单引号内捕获选择。