2012-11-28 23 views
8

Tôi đang cố gắng thay thế các phương thức công khai thành các phương thức được bảo vệ cho các phương thức có nhận xét.Tìm các nhóm có tên thay thế regexp trong geany

Điều này bởi vì tôi đang sử dụng phpunit để kiểm tra một số phương pháp nhưng thực sự không cần phải công khai vì vậy tôi muốn chuyển chúng trên máy chủ sản xuất và chuyển trở lại khi thử nghiệm.

Đây là phương pháp kê khai:

public function extractFile($fileName){ //TODO: change to protected 

Đây là regexp:

(?<ws>^\s+)(?<pb>public)(?<fn>[^/\n]+)(?<cm>//TODO: change to protected) 

Nếu tôi thay thế nó bằng:

\1protected\3\//TODO: change back to public for testing 

Có vẻ như được làm việc nhưng những gì tôi không thể làm việc là đặt tên thay thế bằng. Tôi phải sử dụng \ 1 để có được nhóm đầu tiên. Tại sao đặt tên cho các nhóm nếu bạn không thể truy cập chúng trong các văn bản thay thế? Đã thử những thứ như \, $ ws, \ $ w nhưng điều đó không hiệu quả.

Câu hỏi của tôi là: Văn bản thay thế nếu tôi muốn thay thế \ 1 bằng nhóm được đặt tên là gì?

+0

Cảm ơn bạn, điều đó đã không làm điều đó. Không thể tìm thấy nó ở bất kỳ đâu trong tài liệu. Nếu bạn có thể đặt tên nhóm, bạn nghĩ rằng bạn có thể sử dụng nó trong chuỗi thay thế. Tôi thường bỏ phiếu cho bất kỳ câu trả lời nào hữu ích, bây giờ tôi thấy bạn cũng có thể chấp nhận nó. Sẽ làm điều này ngay bây giờ. – HMR

Trả lời

6

Cú pháp nhóm được đặt tên ?<ws> giống với cú pháp được sử dụng bởi .NET/Perl. Đối với những động cơ regex, tham chiếu chuỗi thay thế cho nhóm được đặt tên là ${ws}. Điều này có nghĩa chuỗi thay thế của bạn sẽ là:

${ws}protected${fn}\//TODO: change back to public for testing

Các \k<ws> tài liệu tham khảo được đề cập bởi m.buettner chỉ được sử dụng cho backreferences trong regex thực tế.

thêm Thông tin:

Có vẻ như Geany cũng cho phép sử dụng các phong cách Python tên nhóm:

  • ?P<ws> là cú pháp chụp
  • \g<ws> được cú pháp chuỗi thay thế
  • (?P=ws) là cú pháp backreference regex

EDIT:

Trông hy vọng của tôi cho một giải pháp đã không pan ra. Từ manual,

"Mẫu con có thể được đặt tên theo một trong ba cách: (? ...) hoặc (? 'Name' ...) như trong Perl, hoặc (? P ...) như trong Python Tham khảo để chụp dấu ngoặc đơn từ các phần khác của mẫu, chẳng hạn như backreferences, đệ quy và điều kiện, có thể được thực hiện bởi tên cũng như theo số. "

Và tiếp tục xuống:

"tài liệu tham khảo Back to tên subpatterns sử dụng Perl cú pháp \ k hoặc \ k'name' hoặc cú pháp Python (P = tên?)."

'Một subpattern được tham chiếu bởi tên thể xuất hiện trong mẫu trước hoặc sau khi tham khảo.'

Vì vậy, suy luận của tôi về cú pháp cho việc sử dụng tên các nhóm là chính xác, thật không may, chúng chỉ có thể được sử dụng trong mẫu phù hợp.Đó là câu trả lời cho câu hỏi của bạn "Tại sao nhóm tên ...?"

Làm thế nào là ngu ngốc này? triển khai các nhóm được đặt tên và cách sử dụng của chúng trong mẫu phù hợp, tại sao cũng không triển khai sử dụng trong chuỗi thay thế?

+0

Cảm ơn bạn đã trả lời. Có lẽ tôi có một geany khác nhưng nếu tôi có văn bản "win7" bằng cách sử dụng biểu thức "(? win) 7" thay thế bằng: "$ {w} 8" kết quả là: "$ {w} 8" sử dụng geany 1.22 – HMR

+0

@HMR - Tôi thực sự không có geany. Tôi đã quan sát rằng cú pháp chụp giống như đối với .NET/Perl, được xác nhận khi tôi kiểm tra sổ tay trực tuyến vì cả hai đều cho phép '? 'Ws'' cũng vậy. Tôi hy vọng rằng động cơ regex cơ bản sẽ cho phép cùng một kiểu được đặt tên trong chuỗi thay thế. Chỉ cần đọc thêm hướng dẫn sử dụng. Có vẻ như các nhóm được đặt tên là _not_ được phép trong chuỗi thay thế. Tôi sẽ chỉnh sửa câu trả lời của mình để bao gồm thêm chi tiết. – robinCTS

+0

Cảm ơn bạn đã dành thời gian để xem xét điều này. Tôi không tìm thấy bất cứ điều gì trong các tài liệu về chuỗi thay thế nhưng muốn chắc chắn rằng tôi đã không bỏ qua một cái gì đó trước khi phán quyết nó ra. – HMR

Các vấn đề liên quan