Регулярное совпадение на Rubular, но не в Ruby - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь вернуть "A1RKKUPIHCS9HS" из строки cheese:

cheese = "#<struct Peddler::Marketplace id=\"A1RKKUPIHCS9HS\",..."

Я пробовал оба scan и match вот так:

cheese.match(/(?<=id=\\").{14}/)
cheese.scan(/(?<=id=\\")./)

Этоработает на Rubular , но когда я пробую это в Ruby, это не так.Понятия не имею, почему.

Ответы [ 3 ]

1 голос
/ 15 марта 2019

Введите следующую строку в качестве тестовой строки в Rubular:

#<struct Peddler::Marketplace id="A1RKKUPIHCS9HS",...

То есть не помещайте строку в двойные кавычки и не избегайте двойных кавычек в строке.Rubular позаботится об этом так же, как окружает ваше регулярное выражение двумя косыми чертами.

Вы хотите, чтобы ваше регулярное выражение было /(?<=id=").{14}/.Это то же самое, что и /(?<=id=\").{14}/, поскольку двойную кавычку не нужно экранировать, но экранирование оставляет ее неизменной и, следовательно, не причиняет вреда.Ruby рассматривает двойные (и одинарные) кавычки с регулярным выражением как обычные символы без особого значения.

0 голосов
/ 15 марта 2019

Просто из любопытства, используя String#[]:

cheese = "#<struct Peddler::Marketplace id=\"A1RKKUPIHCS9HS\",..."
cheese[/(?<=id=").*?(?=")/]
#⇒ "A1RKKUPIHCS9HS"
0 голосов
/ 15 марта 2019

Вы можете сделать .scan(/id="(.{14})"/) более простым способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...