正则表达式模式:从X开始,包含Y,以Z结尾?

时间:2011-09-14 18:51:57

标签: regex regex-group

我有一个我已经制作的应用程序的配置文件,并加载我需要先从配置文件解析它们的配置。我有点卡住了。

以下是配置文件的摘录:

#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 个答案:

答案 0 :(得分:2)

要对结果进行分组,您需要使用括号:

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

(注意,我使用了+,但*也没问题,差异为+至少需要一个字符,但*不匹配任何字符。

至于匹配每一行,这也表现得如预期。根据您正在使用的语言,通常有一些方法可以在整个输入字符串中重复搜索并回传所有匹配项。

根据您正在使用的正则表达式引擎,您也可以为组指定名称。如果是这样,你可以这样做

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