次の例を考えると、他のフレーズが含まれる場合と含まれない場合があるグループにどのように解析できますか?
私たちの必要なもの:
(Text: any number of words) (LocationIndicator: 0 or 1 @) (Location: any number of words)
例:
"meet me @home":
<Text>="meet me"
<LocationIndicator>="@"
<Location>="home"
"meet me in the kitchen @home":
<Text>="meet me in the kitchen"
<LocationIndicator>="@"
<Location>="home"
" meet me @ home ":
<Text>="meet me"
<LocationIndicator>="@"
<Location>="home"
"meet me":
<Text>="meet me"
<LocationIndicator>=""
<Location>=""
この正規表現は必要なことを実行しますが、@句を含める場合に限ります。
^\s*(((?<Text>.*)?)\s*((?<LocationIndicator>(?:@)+?)\s*(?<Location>.*)))\s*$
@句を除外すると、一致するものはありません。言い換えれば、これは一致/グループ化に失敗します:
"meet me":
<Text>="meet me"
<LocationIndicator>=""
<Location>=""
?を含めてみました LocationIndicator / Locationグループの後ですが、フレーズをテキストでグループ化します。
^\s*(((?<Text>.*)?)\s*((?<LocationIndicator>(?:@)+?)\s*(?<Location>.*))?)\s*$
"meet me @home":
<Text>="meet me @home"
<LocationIndicator>=""
<Location>=""
単一の式で与えられたすべての例をどのように一致させることができますか?
注:C#ではこれらの正規表現を使用しています