Có, nó chính xác giống như được mô tả trong this question!
.*
đầu tiên sẽ phù hợp với toàn bộ đầu vào, nhưng sau đó cũng là một chuỗi rỗng ở phần cuối của đầu vào ...
Hãy tượng trưng cho động cơ regex với |
và đầu vào với <...>
trong ví dụ của bạn.
- đầu vào:
<xyz>
;
- động cơ regex, trước khi chạy lần đầu tiên:
<|xyz>
;
- động cơ regex, sau lần chạy đầu tiên:
<xyz|>
(văn bản phù hợp: "xyz");
- động cơ regex, sau lần chạy thứ hai:
<xyz>|
(văn bản phù hợp: "").
Không phải tất cả động cơ regex đều hoạt động theo cách này. Java hiện, tuy nhiên. Vì vậy, perl. Sed, như một ví dụ, sẽ định vị con trỏ của nó sau khi kết thúc đầu vào ở bước 3.
Bây giờ, bạn cũng phải hiểu một điều quan trọng: động cơ regex, khi chúng gặp phải một trận đấu không dài, luôn tiến lên một tính cách. Nếu không, hãy xem xét điều gì sẽ xảy ra nếu bạn cố gắng thay thế '^' bằng 'a': '^' khớp với một vị trí, do đó là một kết quả có độ dài bằng 0. Nếu động cơ không nâng cấp một ký tự, "x" sẽ được thay thế bằng "rìu", sẽ được thay thế bằng "aax", v.v. Vì vậy, sau trận đấu thứ hai, trống, động cơ regex của Java tiến một ký tự "... Trong đó không có bất kỳ: kết thúc xử lý.
"' xyz ".replaceAll (". * "," X ")' trả lại là gì? – robert
@robert Nó trả về '" xx "'. –
@JackEdmonds Tại sao '" xx "' chứ không phải '" xxx "'? – user219882