Composed Regular Expressionsに関して Martin Fowler がまとめた記事を読んでいました。これは、次のようなコードを使用できる場所です。
const string pattern = @"^score\s+(\d+)\s+for\s+(\d+)\s+nights?\s+at\s+(.*)";
そして、それを次のようなものに分割します。
protected override string GetPattern() {
const string pattern =
@"^score
\s+
(\d+) # points
\s+
for
\s+
(\d+) # number of nights
\s+
night
s? #optional plural
\s+
at
\s+
(.*) # hotel name
";
return pattern;
}
}
またはこれ:
const string scoreKeyword = @"^score\s+";
const string numberOfPoints = @"(\d+)";
const string forKeyword = @"\s+for\s+";
const string numberOfNights = @"(\d+)";
const string nightsAtKeyword = @"\s+nights?\s+at\s+";
const string hotelName = @"(.*)";
const string pattern = scoreKeyword + numberOfPoints +
forKeyword + numberOfNights + nightsAtKeyword + hotelName;
またはこれでも:
const string space = @"\s+";
const string start = "^";
const string numberOfPoints = @"(\d+)";
const string numberOfNights = @"(\d+)";
const string nightsAtKeyword = @"nights?\s+at";
const string hotelName = @"(.*)";
const string pattern = start + "score" + space + numberOfPoints + space +
"for" + space + numberOfNights + space + nightsAtKeyword +
space + hotelName;
これは簡単に実行できるように思えますが、いくつかの利点があるかもしれません。私は決して「正規表現の男」ではなく、自分で作成するのに時間をかけるのではなく、必要な正規表現を見つけるためにネットを検索することがよくあります。特定の問題にぴったりの正規表現を見つけたので、それをコピーして貼り付け、テストして、宣伝どおりに機能することを確認します。次に、それが何をするかを説明するコメントをドロップするかもしれません。しかし、その後、私は人生でより大きく、より良いものに向かいます.
マーティン・ファウラーの議論で説明されている方法で正規表現パターンを分割すると、実際にコメントよりも理解しやすくなるかどうか疑問に思っていますか? 結局のところ、コードにはいまだ醜い正規表現が残っていますが、それは多くの部分に分かれています。その式を拡張する必要がある場合...これは、正規表現が何をしているのかを本当に理解するのにどのように役立ちますか?
根っからの perl 連中が正規表現パターンを愛していることは知っています。しかし、他のすべてのプロジェクトで 1 回以上正規表現を扱わない人 (質問) にとって、正規表現パターンをより小さなビットに分割することは、多かれ少なかれ読みやすいと思いますか? プロジェクトでこの概念を採用し、有用だと感じた人はいますか? ...役に立たない?