0

我目前拥有的正则表达式是:

"^(?:(\\.\\.)|^([a-z]+[a-z.\\-]*)([\\*]?)[\\[]*([^\\]]*)[\\]]*)$";

它捕获“..”(第 1 组),第 2-4 组为空

- 一组小写字母、点、破折号。以小写字母开头(第 2 组)
- 后跟可选星号(第 3 组)
- 后跟方括号内的可选内容(第 4 组)

我有几个问题,首先是让 group2 必须以字母结尾,我尝试了很多事情,包括:

"^([a-z]+[a-z.\\-]*[a-z]$)"
"^([a-z]+[a-z.\\-]*[a-z])$"

杀死 3-4 组中的任何东西

"^([a-z]+[a-z.\\-]*[a-z])"

这似乎没有什么不同


我遇到的另一个问题是第 4 组,它不依赖于方括号(这是有道理的,因为我有 * 字符)......但如果我删除该字符,它不会给我任何结果任何组。

非常需要和感谢任何帮助。


作为对以下评论的回应,以下内容应匹配:
"string" - (group1)(group2)(group3)(group4)

".." - (..)()()()
"blah" - ()(blah)()()
"blah.blah" - ()(blah.blah)()()
"blah.blah*" - ()(blah.blah)(*)()
"blah*" - ()(blah)(*)()
"blah.blah*[foobar] - ()(blah.blah)(*)(foobar)
"blah[foobar] - ()(blah)()(foobar)

以下内容不应匹配:

 "."
 "..."
 ".blah"
 "blah."
 ".blah*"
 "blah.*[foobar]
4

2 回答 2

2
                   ┌ one or more lowercase letters followed by
                   │ 
                   │   ┌ none or several occurrences of ───────────────────────┐
                   │   │     ┌ dot or dash                                     │
                   │   │     │     ┌ followed by one or more lowercase letters │
                   │   │     │     │     ┌─────────────────────────────────────┘
                   │   │     │     │     │ 
                   │   │     │     │     │  ┌ followed by optional asterisk
                   │   │     │     │     │  │
                   │   │     │     │     │  │   ┌ followed by optional square brackets
            ┌ or   │   │     │     │     │  │   │         ┌ with some content inside │
            │      │   │     │     │     │  │   │         │        ┌─────────────────┘
            │      │   │     │     │     │  │   │         │        │
^(?:(\\.\\.)|(?:([a-z]+(?:[.\\-]*[a-z]+)*)(\\*?)(?:\\[([^\\]]*)\\])?))$
│   │      │                                                          │
│   └ two  │                                                          │
│     dots ┘                                                          │
│                                                                     │
└ start of string                                       end of string ┘
于 2012-08-15T14:17:18.293 回答
0

这是我能想到的:

^(\.{2})?([a-z](?:\.*-*[a-z])*)?(\*)?(\[[^]]*\])?$

我不确定括号中允许的内容,因此它匹配其中的任何非括号字母。

(正确逃脱 ^(\\.{2})?([a-z](?:\\.*-*[a-z])*)?(\\*)?(\\[[^]]*\\])?$ :)

此正则表达式:[a-z](?:\.*-*[a-z])*将始终匹配以小写字母开头和结尾的字符串。

于 2012-08-15T14:24:35.510 回答