2012-08-15 95 views
0

正则表达式我现在有特定的最后字符类型是:正则表达式,在捕获组

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

它捕获任一“..”(组1)与组2-4是空

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

我有一对夫妇的问题,首先是使它所以第2组必须以字母结尾,我已经尝试了很多事情,比如:

"^([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] 
+0

您能否提供一些您期望匹配/不匹配的示例输入? – davidrac 2012-08-15 14:10:14

+0

你能提供一些你想要匹配和捕获的示例字符串吗? – Kash 2012-08-15 14:11:15

+0

Lol @davidrac:我们在同一时间问同一个问题。 – Kash 2012-08-15 14:12:08

回答

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 ┘ 
+0

需要分组,你的第二个例子是一个即插即用 - 通过了我所有的测试用例,谢谢 – smerny 2012-08-15 15:50:39

+0

如果你不介意解释,这是如何通过“blah.foo.bar”,它实际上是我想要的,但我不知道它是如何做到这一点......从看它,我读它为:“从一个或多个字母开始,包含0或更多的点或破折号,以一个或多个字母结尾”,我没有看到如何它可以允许点/破折号之间的字母 – smerny 2012-08-15 15:57:33

+0

@smerny - 答案已经更新 – 2012-08-15 21:06:43

0

这是我能想出什么与:

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

我不确定括号中允许什么,所以它匹配那里的任何非括号字母。

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

此正则表达式:[a-z](?:\.*-*[a-z])*总是会匹配开始,并以小写字母结尾的字符串。

+0

这一个失败了以下测试用例:“..“ 我把它修改成了这个,但是不能用空字符串开始,只能用点来开始。 :“^(?:(\\。{2})| ^([az](?:\\。* - * [az])*)(\\ *)?(\\ [[^]] * \\])?)$“ 它传递了我所有的测试用例。谢谢 – smerny 2012-08-15 15:48:06