Разбор аргументов в строковом формате в массив, но с учетом вложенных запятых в параметрах по умолчанию - PullRequest
0 голосов
/ 24 марта 2012

Я пишу метод ruby, который принимает такую ​​строку

"foo = { :foo => 'bar', :baz => \"{'foo' : 'bar', 'bar' : 'biff' }\" :bar => 'baz' }, bar, baz = \"('foo,bar,baz')\", &block"

и возвращает массив, подобный этому:

["foo = { :foo => 'bar', :baz => \"{'foo' : 'bar', 'bar' : 'biff' }\" :bar => 'baz' }", "bar", "baz = \"('foo,bar,baz')\"", "&block"]

Однако, пока я не могу правильно разбить строку, мои лучшие усилия все еще разбивают строку на внутренних хешах, например,

"foo = { :foo => 'bar', :baz => \"{'foo' : 'bar', 'bar' : 'biff' }\" :bar => 'baz' }, bar, "baz = \"('foo,bar,baz')\", &block".scan(/(?:[^,(]|\([^)]*\))+/)

Который производит:

["foo = { :foo => 'bar'", " :baz => \"{'foo' : 'bar'", " 'bar' : 'biff' }\" :bar => 'baz' }", " bar", " baz = \"('foo,bar,baz')\"", " &block"] 

Я думаю, что регулярное выражение, которое я использую, близко, но я не уверен, как проверить скобки и фигурные скобки. В настоящее время регулярное выражение ищет только скобки.

Это мое текущее регулярное выражение:

/(?:[^,(]|\([^)]*\))+/

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 24 марта 2012

тебе это не подходит?

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