0

私が現在持っている正規表現は次のとおりです。

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

グループ2〜4が空の「..」(グループ1)、
または
-小文字、ドット、ダッシュのグループのいずれかをキャプチャします。小文字で始まり(グループ2)
-その後にオプションのアスタリスク(グループ3)
-角かっこで囲まれたオプションのコンテンツ(グループ4)

私はいくつかの問題を抱えています。最初は、group2が文字で終わる必要があるようにすることです。私は、次のような多くのことを試しました。

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

グループ3-4のすべてを殺します

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

何も変わらないようです


私が抱えているもう1つの問題は、グループ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 に答える