我正在尝试编写一个 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
一种更简单的方法(假设您不需要匹配捕获后的任何内容):
AjouterRDV((d+),(d+),(d+),(d+),'(.+?)',
参见 Rubular 示例
你可以试试这个: -
/AjouterRDV( (d+), (d+), (d+), (d+), '((?:(?<=\)[']|[^'])*)', .* );$/ix
'((?:(?<=\)[']|[^'])*)'
匹配'
前面有 ,或匹配除
'
之外的任何字符
,只是有人评论,但似乎他删除了它。他的建议是
AjouterRDV( (d+), (d+), (d+), (d+), '((?<=\)[']|[^'])*', .* );$
这几乎有效,除了它没有正确捕获第 5 组的事实。为此,您需要:
AjouterRDV( (d+), (d+), (d+), (d+), '((?:(?<=\)[']|[^'])*)', .* );$
这会将其"外部"组转换为非捕获组,然后在单引号内捕获选择。