-3

こんにちは、パラメーター部分で必要なことを教えてください (1 回だけ許可され>ます。

働くもの:

^(?<command>(name|Name))\s:\s(?<parameter>[\w@]([\s\w._@=*'^/\[\]]*[\w.^/\[\]])*(,\s[\w@]([\s\w._@=*'^/\[\]]*[\w.^/\[\]])*)*)(?<seperator>\s>>\s)*(?<description>\w([\s\w]*[\w.])*)?$

私はこのように実装できると思っていましたが、間違っていました:

^(?<command>(name|Name))\s:\s(?<parameter>[\w@]([\s\w._>@=*'^/\[\]]*[\w.^/\[\]])*(,\s[\w@]([\s\w._>@=*'^/\[\]]*[\w.^/\[\]])*)*)(?<seperator>\s>>\s)*(?<description>\w([\s\w]*[\w.])*)?$

期待される入力:

Name : param > eter1, parameter2 >> description

期待される出力:
CommandPart: Name
ParameterPart1: param > eter1
ParameterPart2: parameter2
説明: description

4

1 に答える 1

1

がorcommandに置き換えられた場合にのみパターンが一致するため、「予想される入力」は実際には予想される入力ではないと想定しています。nameName

通常、この正規表現で本当に何をしたいのかわからないため、何が期待どおりにいかないかを説明するのにも役立ちます。また、ほとんどすべての言語で正規表現の実装が異なるため、これを行っている言語を示すことも非常に役立ちます。

ただし、RegexBuddy に噛ませて、予想される入力を追加すると、問題は、という名前のキャプチャ グループが、 andparameterの一部のコンテンツを放棄するのではなく、行の残りを消費することであると推測されます。これを修正するには、次のように遅延乗数 ( または)を使用できます。seperatordescription*?+?

^(?<command>name|Name)\s:\s(?<parameter>[\w@](?:[\s\w._>@=*'^/\[\]]*?[\w.^/\[\]])*?(?:,\s[\w@](?:[\s\w._>@=*'^/\[\]]*?[\w.^/\[\]])*?)*?)(?<seperator>\s>>\s)*(?<description>\w[\s\w]*[\w.]*)?$

名前付きグループを使用している場合、実際にはそれらをキャプチャしたくないと想定しているため、いくつかの番号付きキャプチャ グループを削除し、一部を非キャプチャ サブグループに設定したことに注意してください。非キャプチャ サブグループは のように作成され(?:something)ます。

于 2013-05-06T17:10:54.540 に答える