Шаблон регулярного выражения: начинается с X, содержит Y, заканчивается Z? - PullRequest
0 голосов
/ 14 сентября 2011

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

Вот фрагмент файла конфигурации:

#0_downloaded_url:[http://example.com/to/be/downloaded/, http://example.com/to/be/downloaded/]
#0_follow_url:http://example.com/to/be/downloaded/
#0_download_url:http://example.com/to/be/downloaded/
#0_main_url:http://example.com/to/be/downloaded/
#1_downloaded_url:[http://example.com/to/be/downloaded/, http://example.com/to/be/downloaded/]
#1_follow_url:http://example.com/to/be/downloaded/
#1_download_url: http://example.com/to/be/downloaded/
#1_main_url:http://example.com/

Я хочу найти все, что соответствует: # (цифра) _ (текст и подчеркивание):(что угодно) (перевод строки), так что в основном по одной строке за раз.Я также хочу сгруппировать результаты, поэтому я получаю первую цифру, затем текст после цифры и, наконец, текст (в данном случае URL) после точки с запятой.

Это то, что я пришелдо сих пор:

^#\d_\w*:.*

Но это не то, что я хочу.Он соответствует только одной строке и не группирует результаты.

1 Ответ

2 голосов
/ 14 сентября 2011

Для группировки результатов необходимо использовать скобки:

^#(\d)_(\w+):(.+)

(заметьте, я использовал +, но * тоже подойдет, разница в + требует как минимум один символ* не будет соответствовать ни одному).

Что касается сопоставления каждой строки, то она также ведет себя как ожидалось.В зависимости от языка, на котором вы работаете, обычно есть методы для повторения поиска по всей входной строке и возврата всех совпадений.

В зависимости от используемого вами механизма регулярных выражений вы можете назначитьимена для групп, а также.Если это так, вы можете сделать это так

^#(?<id>\d)_(?<field>\w+):(?<value>.+)
...