2014-02-13 4 views
0

Как говорится в этом вопросе, мне нужна помощь с шаблоном регулярного выражения или альтернативой.Нужна помощь или альтернатива regex

У меня есть строки, которые выглядят следующим образом;

"House.Rooms(3).Kitchen(1)" 
"House.Kitchen("20.20 feet").Rooms(3).Wc(1)" 

Что мне нужно, это шаблон регулярного выражения, который может соответствовать строкам выше. Подумайте о строках как синтаксисе программирования.

Таким образом, приведенные выше строки действительны, но нет: House .Kitchen("20.20 feet"). Rooms(3). Wc(1). Пробелы допускаются только в двойных или одинарных кавычках.

В настоящее время у меня есть следующий шаблон регулярного выражения /@[0-9a-zA-Z._(,)@]+/, но это не соответствует строкам, в которых есть пробелы внутри или любой другой символ, который не определен в регулярном выражении.

Любая помощь была бы принята с благодарностью.

+0

Почему? Вы пытаетесь прочитать какой-то исходный код приложения? –

+0

Его исходный код, его язык запросов, в основном внешние разработчики, могут запрашивать нашу базу данных, не позволяя им напрямую выводить команды sql. –

ответ

1

Это должно соответствовать строкам. Я не делал никаких групп захвата, поскольку вы только указываете, что хотите сопоставить строки, а не захватывать какой-либо контент.

^(?:\w+(?:\((?:\d+|".*?")\))?(?:\.|$))+$ 

"разобранном" версия, для более легкого чтения:

^    # Start of line 
    (?:    # Start of group used for repeating 
    \w+    # Valid strings (House, Rooms, Kitchen etc.) 
    (?:    # Start of optional group containing parenthesis and parameters 
     \(    # Literal open parenthesis 
     (?:    # Start of group containing parameters 
     \d+    # Numbers 
     |    # or 
     ".*?"   # String/stuff inside quotes 
    )    # End of parameter group 
     \)    # Literal close parenthesis 
    )?    # End of optional group containing parenthesis and parameters 
    (?:    # Start of group requiring string to end with a dot or EOL 
     \.    # Literal dot 
     |    # or 
     $    # Must be EOL 
    )    # End of group requiring string to end with dot or EOL 
)+    # End of group (repeat 1 or more times) 
$    # EOL 

Live version

+0

Спасибо @ohaal, вот что мне нужно. –

Смежные вопросы