Một vài cách khác đáng để thêm vào sách lừa RegEx :
Trước tiên, bạn có thể nén RegEx của mình thành: /(<br\s*/?>)+/i
và thay thế bằng <br />
(không cần phải tạo gánh nặng cho RegExP bằng giao diện) và bạn sẽ luôn kết thúc với ngắt dòng XHMTL đã chọn.
Các cách khác để sửa đổi RegEx của bạn để nó không bị ngắt */
kết thúc bình luận hoặc ?>
kết thúc tập lệnh:
- Sử dụng các bộ lượng hóa sở hữu :
#(<br\s*+/?+>)+#i
- về cơ bản có nghĩa là \s*+
nếu bạn tìm thấy khoảng trắng khớp với số lượng có và giữ nó, và /?+
nếu bạn tìm thấy dấu gạch chéo hãy giữ nó!
- Kèm theo
\s*
và /*
trong các nhóm chụp =>#(<br(\s*)(/?)>)+#i
Bản trình diễn trực tiếp: http://codepad.viper-7.com/YjqUbi
Và vì chúng tôi đã nghiêng về hành vi sở hữu, RegEx nhanh nhất cũng bỏ qua vấn đề bình luận là: bản demo được giải thích#(<br\s*+/?+>)++#i
Đối với bình luận trong các tình huống khó khăn
Khi bạn không thể thay đổi mã hoặc đã sử dụng một nhận xét nhiều dòng và:
1. Sử dụng nowdoc :
$string='Hello<br>World<br><br />World<br><br><br>Word!';
<<<'comment'
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
comment;
Mã trực tiếp: http://codepad.viper-7.com/22uOtV
Lưu ý: nowdoc tương tự như heredoc nhưng nó không phân tích nội dung và phải có dấu phân cách bắt đầu được đặt trong '
dấu ngoặc đơn '
( lưu ý rằng dấu phân cách kết thúc không thể được xác định , phải được theo sau ;
và một dòng mới ! )
2. Nhảy qua mã bằng một goto :
$string='Hello<br>World<br><br />World<br><br><br>Word!';
goto landing;
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
landing:
Ví dụ trực tiếp: http://codepad.viper-7.com/UfqrIQ
3. Nhảy qua mã bằng if(false)
hoặc if(0)
:
$string='Hello<br>World<br><br />World<br><br><br>Word!';
if(0){
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
}
Kiểm tra: http://codepad.viper-7.com/wDg5H5