Tôi không nghĩ có bất kỳ hỗ trợ trực tiếp nào cho điều này, nhưng bạn chắc chắn có thể viết mẫu đang hoạt động. Các mẫu hoạt động cho phép bạn triển khai mã của riêng bạn sẽ chạy như một phần của mẫu phù hợp và bạn có thể giải nén & trả về một phần của giá trị.
Sau đây là mẫu lấy hai tham số (tiền tố và chuỗi postfix) và thành công nếu đầu vào đã cho bắt đầu/kết thúc bằng chuỗi được chỉ định. Mô hình là không đầy đủ (có thể thất bại), vì vậy chúng tôi sẽ sử dụng cú pháp |Name|_|
và nó sẽ cần phải trả lại giá trị tùy chọn:
let (|Middle|_|) prefix postfix (input:string) =
// Check if the string starts with 'prefix', ends with 'postfix' and
// is longer than the two (meaning that it contains some middle part)
if input.StartsWith(prefix) && input.EndsWith(postfix) &&
input.Length >= (prefix.Length + postfix.Length) then
// Strip the prefix/postfix and return 'Some' to indicate success
let len = input.Length - prefix.Length - postfix.Length
Some(input.Substring(prefix.Length, len))
else None // Return 'None' - string doesn't match the pattern
Bây giờ chúng ta có thể sử dụng Middle
trong mô hình kết hợp (ví dụ như khi sử dụng match
):
match "[aaa]" with
| Middle "[" "]" mid -> mid
| all -> all
Nguồn
2010-09-20 15:53:01
Xem thêm http://stackoverflow.com/questions/3722591/pattern-matching-on-the-beginning- of-a-string-in-f – Brian