Tôi đang cố gắng viết biểu thức chính quy để ghi lại URL để trỏ đến máy chủ proxy.
bodystring = Regex.Replace(bodystring, "(src='/+)", "$1" + proxyStr);
Ý tưởng của biểu thức này là khá đơn giản, về cơ bản tìm trường hợp của "src = '/" hoặc "src =' //" và chèn một url PROXY tại điểm đó. Điều này làm việc nói chung nhưng đôi khi tôi đã tìm thấy các trường hợp mà một chữ "$ 1" sẽ kết thúc trong chuỗi kết quả.
Điều này không có ý nghĩa với tôi bởi vì nếu không có sự trùng khớp thì tại sao nó lại thay thế được gì?
Thật không may, tôi không thể đưa ra một ví dụ đơn giản về điều này chỉ xảy ra với các chuỗi rất lớn, nhưng tôi muốn biết khái niệm những gì có thể làm cho điều này xảy ra.
Là một sang một bên, tôi đã cố gắng viết lại biểu thức này sử dụng một lookbehind tích cực như sau:
bodystring = Regex.Replace(bodystring, "(?<=src='/+)", proxyStr);
Nhưng điều này kết thúc với proxyStr hai lần trong đầu ra nếu chuỗi đầu vào có chứa "src = '//". Điều này cũng không có ý nghĩa với tôi bởi vì tôi nghĩ rằng "src =" sẽ phải có mặt trong đầu vào hai lần để có được proxyStr kết thúc hai lần trong đầu ra.
Bạn có thể cung cấp ví dụ về giá trị 'proxyStr' không? – dasblinkenlight
Cảm ơn bạn đã phản hồi. Bạn có thể làm rõ? Tôi không chắc làm thế nào tôi có thể sử dụng một "\ 1" để giải quyết vấn đề này. Ở trên tôi có nghĩa là "$ 1" đôi khi sẽ kết thúc trong chuỗi kết quả của tôi, như trong "... new Image(). $ 1myproxy/proxy? Url = .....". – Locksleyu
proxyStr = "10.15.15.15:8008/proxy?url=http://"; Tuy nhiên tôi đã thấy vấn đề thứ hai (nhiều trường hợp của proxyStr trong kết quả) xảy ra nhất quán ngay cả với proxyStr = "PROXY". – Locksleyu