2012-08-15 79 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