正则表达式的问题

时间:2010-02-09 14:51:48

标签: ruby regex

我想要一个匹配的正则表达式:

ID为

的类型
[Image=4b5da003ee133e8368000002]
[Video=679hfpam9v56dh800khfdd32]

使用@分隔0到n个附加选项:

[Image=4b5da003ee133e8368000002@size:small]
[Image=4b5da003ee133e8368000002@size:small@media:true]

到目前为止,我有这个:

\[[a-zA-Z]*=[a-zA-Z0-9]*[@[a-zA-Z]*:[a-zA-Z]*]*\]

...但它并不匹配所有情况。

5 个答案:

答案 0 :(得分:5)

\[[a-zA-Z]+=[a-zA-Z0-9]{24}(@[a-zA-Z]+:[a-zA-Z]+)*\]
                           ^                    ^

你用[]封闭了那个部分,如你所知,这是一个课程,你只想要一个分组。您还应确保第一个匹配至少有一个字符,并且似乎id块始终具有24个字符,如果是这种情况,则使用{X}来定义长度为X的重复。

答案 1 :(得分:3)

不应将其他选项分组(而不是括号!)并标记为可选(而不是*)?你应该使用+代替*,否则就会匹配一个空字符串。

\[[a-zA-Z]+=[a-zA-Z0-9]+(@[a-zA-Z]*:[a-zA-Z]*)*\]

答案 2 :(得分:2)

\[[a-zA-Z]+=[a-zA-Z0-9]+(@[a-zA-Z]+:[a-zA-Z]+)*\]

您需要将可选组括在括号中,而不是括号。

答案 3 :(得分:1)

^\[\w+=\w+(@\w+:\w+)*\]$

我想应该可以更具体一些。

答案 4 :(得分:0)

\[[a-zA-Z]+=[a-zA-Z0-9]+(@[a-zA-Z]+:[a-zA-Z]+)?\]

我认为这会好一点:)