2013-03-13 4 views
0

У меня есть строка, которая является вызовом функции. Я хочу, чтобы разобрать его и получить параметры:Строковый синтаксис с использованием регулярного выражения

"add_location('http://abc.com/page/1/','This is the title, it is long',39.677765,-45.4343,34454,'http://abc.com/images/image_1.jpg')" 

Он имеет в общей сложности 6 параметров и представляет собой смесь из URL, целых чисел и знаков после запятой. Я не могу найти регулярное выражение для метода split, который я буду использовать. Пожалуйста помоги! Это то, что я придумал - это неправильно.

/('(.*\/[0-9]*)',)|([0-9]*,)/ 

ответ

2

Предполагая, что все не-числовые параметры заключены в одиночные кавычки, как в вашем примере

string.scan(/'.+?'|[-0-9.]+/) 
+0

Nice Regex! Предполагая, что аргументы являются простыми константами - никаких арифметических операций или вызовов методов –

+0

Отлично - именно то, что мне нужно. Нечисловые параметры заключаются в одинарные кавычки. – bpn

0

Вы действительно не хотите разбирать вещи этого комплекса с помощью reg-ex; это просто не сработает в долгосрочной перспективе. Я не уверен, если вы просто хотите разобрать эту одну строку или если в этой форме много строк, которые различаются в точном содержании. Если вы дадите немного больше информации о своей конечной цели, вы можете получить более подробную помощь.

Для анализа этого комплекса в общем случае вы действительно хотите выполнить правильную токенизацию (то есть лексический анализ) строки. В прошлом с Ruby, у меня были хорошие впечатления, делающие это с Citrus. Это хороший камень для синтаксического анализа сложных маркеров/языков, которые вы пытаетесь сделать. Вы можете узнать больше об этом здесь:

https://github.com/mjijackson/citrus

3

Лечащий строку вроде CSV может работать:

require 'csv' 
str = "add_location('http://abc.com/page/1/','This is the title, it is long',39.677765,-45.4343,34454,'http://abc.com/images/image_1.jpg')" 
p CSV.parse(str[13..-2], :quote_char => "'").first 
# => ["http://abc.com/page/1/", "This is the title, it is long", "39.677765", "-45.4343", "34454", "http://abc.com/images/image_1.jpg"] 
Смежные вопросы