2012-12-27 39 views
5

Vì vậy, công ty của tôi đang sử dụng bên thứ ba cho trang web trên thiết bị di động của họ và chúng tôi có một bảng điều khiển để cập nhật một số mã và kiểm soát nội dung thông qua chúng. Một trong những điều là một tính năng tìm kiếm và thay thế có thể cập nhật mã cho trang web. Điều duy nhất là, nó sử dụng rất nhiều mã regex phức tạp và tôi không thể tìm thấy một hướng dẫn tốt về những thứ phức tạp. Vì vậy, đây là ví dụ ông đã cho tôi dính lấy thẻ đoạn và đặt nó trong liên kếtTìm kiếm và thay thế bằng Regex bằng các biến thay thế

Tìm kiếm

(#d6d6d4.+?>.+?<p><a.+?>.+?)</a>(.+?)</td> 

Replace With

$1$2</a></td> 

là gì $ 1 và $ 2 đại diện? Tôi biết nó có thể có một cái gì đó để làm với một trong những. +? nhưng tôi không chắc chắn cái nào. Nếu có ai biết hãy giúp tôi. Tôi đã thêm mã xuống dưới với những con số bên cạnh các biến regex

(#d6d6d4.+?**[1]**>.+?**[2]**<p><a.+?**[3]**>.+?**[4]**)</a>(.+?**[5]**)</td> 

Trả lời

14

$ 1 và $ 2 đại diện cho văn bản trong việc chụp nhóm trong regex. Chụp nhóm là những gì bên trong dấu ngoặc đơn.

(  // start first capture group 
#d6d6d4 // match #d6d6d4 
.+?>  // any character, non-greedy, up to '>' 
.+?<p> // any character, non-greedy, up to <p> 
<a.+?> // an <a..> tag, consuming everything up to '>' 
.+?  // all characters from <a> to </a> 
)  // close the first capture group before the '</a>' 
</a>  // literal '</a>' 
(  // start second capture group 
.+?  // match all, non-greedy up to '</td>' 
)  // close capture group before '</td>' 
</td> // literal '</td>' 

Vì vậy, bạn nếu bạn có chuỗi này: <td color=#d6d6d4 foo=bar>Hello, world<p><a href=http://foo.com>foo link</a>some more text</td>

$ 1 trận đấu: #d6d6d4 foo=bar>Hello, world<p><a href=http://foo.com>foo link $ 2 trận đấu: some more text

Vì vậy, các chuỗi được chuyển thành: <td color=#d6d6d4 foo=bar>Hello, world<p><a href=http://foo.com>foo linksome more text</a></td>

Mà về cơ bản có nghĩa là Thẻ </a> được di chuyển sau some more text (hoặc ngay trước </td> nếu bạn thích)

+2

Cảm ơn bạn đây là một trợ giúp rất lớn, xem $ 1 tôi không biết là một nhóm nắm bắt để đó là một trợ giúp rất lớn! Cảm ơn bạn! – user1566783

1

tôi xem xét http://rubular.com/ là một công cụ đào tạo tuyệt vời cho của regex vì nó tương tác và bạn có thể tiếp tục cố gắng mô hình khác nhau đối với văn bản khác nhau và bạn sẽ thấy kết quả ngay.

Nó bao gồm một liên kết đến http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html#UJ là hướng dẫn cơ bản tốt cho các cụm từ thông dụng.

Ngoài ra còn có http://www.regular-expressions.info/

Tại sao cuộc đấu tranh để viết riêng của bạn khi có thậm chí một trang web cho 3,500+ thư viện regex tại http://regexlib.com

Các biến $ được sử dụng để lưu trữ 'của trận đấu được thực hiện: - $ 1 cho trận đấu đầu tiên; $ 2 cho lần thứ hai, v.v.

+0

Ok tôi thấy nơi $ 2 là nhận dân cư có ở cuối nhưng đâu là $ 1 nhận được thông tin – user1566783

+0

Cảm ơn các trang web này, tôi thích ứng dụng reggy để thử nghiệm. http://reggyapp.com/ – DogCoffee

4

biến $ 1 và $ 2 được ghi lại cho các paterns bên trong (parens) $ 1 là nhóm paren đầu tiên và $ 2 là nhóm thứ hai.

+0

Ok vì vậy $ 2 là lấy cái cuối cùng ở giữa các thẻ đóng nhưng sau đó là $ 1 lấy bất cứ điều gì là đúng sau khi mở một thẻ? – user1566783

+0

Đúng vậy. – Barmar

+0

Ok nhưng tôi đoán đó là những gì tôi đang bối rối vì tại sao nó không phải là một trong những quyền trước thẻ đoạn? – user1566783

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