E4220#
Compiler diagnostic name: regex_match_binding_not_supported.
字句ケースで、そのマッチモードでは利用できない束縛が使われています。
String と StringView の入力では、先頭一致の lexmatch は before= と after= の両方をサポートします。最長一致モードは入力の先頭から始まるため、after= はサポートしますが before= はサポートしません。lexscan はどちらの束縛もサポートしません。ストリーミング対象は入力バッファを消費し、メモリ内の @lexbuf.StringScanner は次のスキャン位置を cursor フィールドに保存します。
Erroneous example#
///|
pub fn first_word(input : String) -> StringView {
lexmatch input with longest {
(re"^[a-z]+" as word, before=_) => word
_ => ""
}
}
Suggestion#
lexscan では before= または after= を削除し、正規表現を ^ でアンカーしてください。lexmatch では before= を削除して正規表現を ^ でアンカーし、マッチしなかった接尾部が必要な場合は after= を使用してください。
///|
pub fn first_word(input : String) -> StringView {
lexmatch input with longest {
(re"^[a-z]+" as word, after=_) => word
_ => ""
}
}