0

誰かが正しい構文を教えてくれませんか。完全な文字列は、型を除く各パターンの数字と文字と空白のみで構成されている必要があります。タイプと 1 つのパラメーターは必須です。前後の空白> :は必須です。後の空白,は必須です。いくつかのパラメーターとノードはオプションです。

GOOD
type : param
type : par am, para m > no de
type : param > node
type : param, param2 > node
type : param, param2, param3 > node

NOTGOOD
type:                             <<< no param
type: param                       <<< because no whitespace after type
type : param,                     <<< , to much
type : param, param, > node       <<< 1 , after second param to much
type : param, param >> node       <<< 1 > to much

それが私が今持っているものです:

^(?<type>(\w+(\s)*))\s+:\s+(?<params>.+\S*?)(?<node>\s+>\s+(\w|\s)*?)*$
4

1 に答える 1

2

この正規表現を試してください:

"^(?<type>\w+)\s+:\s+(?<params>\w[\s\w]*(,\s+\w[\s\w]*)*)(\s+>\s+(?<node>\w[\s\w]*)*)?$"

複数のノードの例を挙げていないので、それらがどのように見えるかわかりませんでした。これにより、それらの間のスペースのみが許可されます。カンマが必要な場合は、"node" 一致グループを "params" 一致グループと同じにします。

最新のコメントに基づいて、各パラメーターとノードには複数の「単語」を含めることができますが、先頭または末尾のスペースはないようです。これは、 、、およびの後に空白文字が1 つしかないことも意味します。これが当てはまる場合は、正規表現の次のバリエーションを試してください。:,>

"^(?<type>\w+)\s+:\s(?<params>\w([\s\w]*\w)*(,\s\w([\s\w]*\w)*)*)(\s>\s(?<node>\w([\s\w]*\w)*)*)?$"
于 2013-05-01T20:17:21.617 に答える