1

ユーザー名を取得するためにチャット出力を解析しています。出力は次のようになります。

<Darker> MC_BOT sethome
(From Darker): MC_BOT exit

文字列内のユーザー名とコマンドの内容を一致させる必要があります。両方の文字列からこれらのデータを取得するのは簡単です。

^(<([A-Za-z0-9_]+)>|\\(From ([A-Za-z0-9_]+)\\):) MC_BOT ([a-z]+)( [a-zA-Z0-9 ]+)?$
  |<Darker>         |(From Darker):                     |sethome

問題は、<Darker>出力フィールド2が使用されているのに対し(From Darker)、パーサーはフィールド3を使用していることです。

<Darker> MC_BOT command parameters
   1: <Darker>
   2: Darker  - field 2!
   3: 
   4: command
   5:  parameters


(From Darker): MC_BOT command parameters
   1: (From Darker):
   2: 
   3: Darker  - field 3!
   4: command
   5: parameters   

では、この正規表現をどのように記述して、同じフィールドにユーザー名が含まれるようにする必要がありますか?また、正規表現に無視させることはでき(...|...)ますか?<username>またはではなく、ユーザー名と一致する必要があるだけです(From username):

4

1 に答える 1

4

Boost はbranch resetをサポートしているようです。したがって、次のようなものを使用できます。

^(?|<([A-Za-z0-9_]+)>|\(From ([A-Za-z0-9_]+)\):) MC_BOT ([a-z]+)( [a-zA-Z0-9 ]+)?$
 ^   ^                       ^                          ^       ^
 |    \ group 1               \ also group 1             \ g.2   \ group 3
 |
 \ branch reset
于 2013-03-21T23:30:16.617 に答える