Tôi có chuỗi khớp với cụm từ thông dụng này: ^.+:[0-9]+(\.[0-9]+)*/[0-9]+$
có thể dễ dàng được hiển thị là (Text):(Double)/(Int)
. Tôi cần phải chia chuỗi này thành ba phần. Thông thường điều này sẽ dễ dàng, ngoại trừ việc (Text)
có thể chứa dấu hai chấm, vì vậy tôi không thể phân chia trên bất kỳ dấu hai chấm nào - nhưng thay vào đó là dấu hai chấm cuối cùng.Tùy chọn sử dụng String.split(), chia chuỗi tại lần xuất hiện cuối cùng của dấu phân tách
.*
là tham lam nên nó đã làm một công việc khá gọn gàng để làm điều này, nhưng điều này sẽ không hoạt động như một biểu thức chính quy thành String.split() vì nó sẽ ăn (Text)
như một phần của dấu phân tách. Lý tưởng nhất là tôi muốn có một cái gì đó mà sẽ trả về một String [] với ba chuỗi. Tôi là 100% tốt với không sử dụng String.split() cho việc này.
OK, bây giờ nói rằng thay vì sử dụng '[\ d \.] +' để phù hợp với đôi, nếu tôi muốn được nghiêm ngặt và yêu cầu '\ d + (\. \ d +) *'. Tôi có thể sử dụng an toàn chỉ các nhóm 0,1,3? Đó là để nói, 'sometext: other: 2/4' và 'sometext: other: 2.0/4' sill nhóm theo cùng một cách? – Huckle
Nó sẽ là nhóm 1, 2 và 4, nhưng bạn không cần phải bận tâm với điều đó.Chỉ cần làm cho nhóm mới một không bắt : '\ d + (?: \. \ d +)?' –
nhóm (0) trả về toàn bộ chuỗi phù hợp. Đây là một trong số ít các trường hợp whe chỉ số lại không bắt đầu bằng 0. @AlanMoore có một gợi ý tốt cho một regex kép nghiêm ngặt. –