Tôi đang sử dụng regex để tìm bất kỳ URL nào và liên kết chúng theo đó. Tuy nhiên, tôi không muốn liên kết bất kỳ URL nào đã được liên kết, vì vậy tôi đang sử dụng lookbehind để xem liệu URL có một href trước đó hay không. Điều này không thành công mặc dù định lượng độ dài biến đổi không được phép trong lookahead và lookbehind cho PHP.lookbehind tiêu cực và định lượng tham lam trong php
Đây là regex cho trận đấu:
/\b(?<!href\s*=\s*[\'\"])((?:http:\/\/|www\.)\S*?)(?=\s|$)/i
cách tốt nhất xung quanh vấn đề này là gì?
EDIT:
tôi vẫn chưa kiểm tra nó, nhưng tôi nghĩ các trick để làm việc đó trong một regex duy nhất được sử dụng biểu thức điều kiện trong regex, được hỗ trợ bởi PCRE. Nó sẽ giống như thế này:
/(href\s*=\s*[\'\"])?(?(1)^|)((?:http:\/\/|www\.)\w[\w\d\.\/]*)(?=\s|$)/i
Điểm mấu chốt là nếu href được chụp, trận đấu được ngay lập tức ném ra do điều kiện (?(1)^|)
, được đảm bảo để không khớp nhau. Có thể có điều gì đó sai trái với nó. Tôi sẽ kiểm tra nó vào ngày mai.
Um, sử dụng trình phân tích cú pháp HTML và chỉ liên kết khi đó là nút văn bản? – kennytm
Đó có lẽ là giải pháp tốt nhất. Tôi đã tò mò hơn để xem nếu có một cách để điều chỉnh regex mặc dù. –
+1 câu hỏi hay. – NikiC