1

我正在尝试编写一个 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

4

3 回答 3

3

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

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

参见Rubular 示例

于 2012-11-30T12:01:58.283 回答
2

你可以试试这个: -

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

'((?:(?<=\\)[']|[^'])*)'匹配'前面的\, 或匹配任何字符,除了'

于 2012-11-30T11:45:44.857 回答
1

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

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

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

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

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

于 2012-11-30T11:51:10.400 回答