У меня есть регулярное выражение с не жадным модификатором, которое, похоже, не работает. Я пробовал так много вариантов регулярного выражения и различные другие способы, о которых я мог думать без успеха, что я теряю голову
Я хочу удалить все пустые строки, встроенные в строку s
ниже. С моим регулярным выражением я ожидал удалить все вещи, которые совпадают с чем-то = ""
s = 'a,b="cde",f="",g="hi",j=""'
puts s; puts s.gsub( /,.+?="",?/ , "," ).chomp(','); nil
Ожидаемое:
a,b="cde",g="hi"
Что я получу:
a,g="hi"
Почему .+?
не жадный в регулярном выражении gsub
ниже?
Это работает, если я ограничиваю .
набором символов [\w\d_-]
, но это заставляет меня делать предположения:
puts s; puts s.gsub( /,[\w\d_-]+?=""/ , "" ).chomp(','); nil
# outputs:
a,b="cde",f="",g="hi",j=""
a,g="hi"
Это также работает, если я выполняю какой-то негативный поиск, например:
puts s; puts s.gsub( /,.+?="",?/ , "," ).chomp(','); nil
# outputs:
a,b="cde",f="",g="hi",j=""
a,g="hi"
Но все же я не понимаю, почему это не сработало в первом случае.