Регулярное выражение в Ruby, похоже, не работает - PullRequest
6 голосов
/ 30 сентября 2011

Создание парсера аргумента.Я хочу разбить строку на массив, где разделитель равен ", ", за исключением случаев, когда ему предшествует "|".Это означает, что строка

"foo, ba|, r, arg"

должна привести к

`["foo", "ba|, r", "arg"]`

Я пытаюсь использовать это регулярное выражение: (?<!\|),, которое работает в http://regexhero.net/tester/, но когда я пытаюсь

args.split(/(?<!\|), /)

в рубине я получаю сообщение об ошибке: undefined (?...) sequence: /(?<!\|), /

1 Ответ

10 голосов
/ 30 сентября 2011

Движок регулярных выражений Ruby не поддерживает lookbehind (пока).

Вам нужно переключиться на 1.9 или использовать Oniguruma .


Если это такне вариант, вы можете найти |, и заменить его каким-то маркером.После того, как все сказано и сделано, поместите |, обратно.

Вы также можете попробовать регулярное выражение, например:

/(?:[^|]), /

Но, очевидно, (?:[^|]) - это не нулевая ширина, котораяозначает, что после этого вам потребуется проделать дополнительную работу.

...