これは、正規表現構文の形式化に関する議論から生じました。いくつかの正規表現パーサーでこの動作を確認したため、言語に依存しないタグを付けました。
次の式を取ります (好みの言語に合わせて調整してください)。
replace("input", "(.*)*", "$1")
空の文字列を返します。なんで?
さらに興味深いことに、この式replace("input", "(.*)*", "A$1B")
は string を返しますABAB
。なぜダブル空の試合なのですか?
免責事項:バックトラックと貪欲な一致については知っていますが、Jeffrey Friedl.*
によって作成されたルールでは、すべてに一致し、それ以上のバックトラックや一致は行われないことが規定されているようです。では、なぜ$1
空なのですか?
注:(.+)*
入力文字列を返すと比較してください。ただし、http://regexhero.comは、まだ 2 つの一致があることを示しています。これは、上記と同じ理由で奇妙に思えます。