Từ những gì tôi có thể thu thập từ các tài liệu Pharo trên regex, tôi có thể xác định một đối tượng biểu hiện thường xuyên như:Capture chuỗi thay thế regex
re := '(foo|re)bar' asRegex
Và tôi có thể thay thế các regex phù hợp với một chuỗi qua này:
re copy: 'foobar blah rebar' replacingMatchesWith: 'meh'
Điều này sẽ dẫn đến: `'meh blah meh'.
Cho đến nay, rất tốt. Nhưng tôi muốn thay thế 'bar'
và để lại tiền tố một mình. Do đó, tôi cần một biến để xử lý parenthetical được chụp:
re copy: 'foobar blah rebar' replacingMatchesWith: '%1meh'
Và tôi muốn có kết quả: 'foomeh blah remeh'
. Tuy nhiên, điều này chỉ mang lại cho tôi: '%1meh blah %1meh'
. Tôi cũng đã thử sử dụng \1
hoặc \\1
hoặc $1
hoặc {1}
và nhận thay thế chuỗi chữ, ví dụ:, '\1meh blah \1meh'
là kết quả.
tôi có thể làm điều này một cách dễ dàng đủ trong GNU Smalltalk với:
'foobar blah rebar' replacingAllRegex: '(foo|re)bar' with: '%1meh'
Nhưng tôi không thể tìm thấy bất cứ nơi nào trong tài liệu regex Pharo mà nói với tôi làm thế nào tôi có thể làm điều này trong Pharo. Tôi đã thực hiện một loạt các googling cho Pharo regex là tốt, nhưng không bật lên bất cứ điều gì. Đây có phải là phần khả năng của lớp RxMatcher hay một số lớp Pharo regex khác không?
có vẻ như Pharo không hỗ trợ thay thế với các nhóm chụp – rock321987
Vâng, bạn đã thử các phong cách backreferencing thông thường? Giống như '\ 1', hoặc' \\ 1' hoặc '$ 1' (có lẽ, với' matchesReplacedWith')? Các nhóm chụp được hỗ trợ, rõ ràng từ những gì phù hợp có thể làm trong Pharo, nhưng không có gợi ý về việc liệu các hỗ trợ ngược có được hỗ trợ như các phần của các mẫu thay thế hay không. –
@ WiktorStribiżew Có, tôi đã thử '\ 1',' \\ 1' và '$ 1'. Trong mỗi trường hợp, sự thay thế là chuỗi chữ. Tôi cập nhật câu hỏi của tôi cho thấy những nỗ lực đó. Tôi thấy các nhóm chụp được hỗ trợ theo như kết hợp đi. Có các ví dụ trong tài liệu để chụp và liệt kê các ảnh chụp. Tuy nhiên, không có gì về backreferencing chúng trong một chuỗi thay thế. Điều này có vẻ cơ bản để regex tìm/thay thế cho tôi, vì vậy tôi ngạc nhiên là nó không được hỗ trợ. – lurker