2010-05-14 39 views
5

Tôi biết rằng:php: cắt thẻ br từ đầu chuỗi?

preg_replace('<br\s*\/?>', '', $string); 

sẽ loại bỏ tất cả các thẻ BR từ $ string ...

Làm thế nào chúng ta có thể loại bỏ tất cả <br><br/><br /> thẻ chỉ khi họ đang có trong đầu của $ string? ($ String trong trường hợp của tôi là mã html với các thẻ khác nhau ...)

Trả lời

16

Chỉ cần thêm một neo thích hợp (^):

preg_replace('/^(?:<br\s*\/?>\s*)+/', '', $string); 

này sẽ phù hợp nhiều <br> s vào đầu của chuỗi .

(?:…) là nhóm không bắt giữ vì chúng tôi chỉ sử dụng dấu ngoặc đơn ở đây để nhóm biểu thức, chứ không chụp. Công cụ sửa đổi không thực sự cần thiết - (…) cũng sẽ hoạt động tốt, nhưng công cụ biểu thức chính quy sẽ phải làm nhiều việc hơn vì nó cần ghi nhớ vị trí và thời lượng của từng lần truy cập bị bắt.

+0

Bạn sẽ cần các dấu phân cách xung quanh regex của mình và vì không có gì cần chụp, hãy sử dụng nhóm không chụp '(?: ...)' – salathe

+0

@salathe: Yup… Tôi đã thêm chúng. Lúc đầu, tôi chỉ sao chép mã câu hỏi, đó là lý do tại sao tôi quên chúng. - Và nhóm không bắt giữ cũng là một ý kiến ​​hay. –

+0

cảm ơn cho các tip neo, đó là những gì tôi đã mất tích ... regex của bạn không loại bỏ tất cả các lần xuất hiện nhưng kết hợp với bài đăng này: http://stackoverflow.com/questions/133571/how-to-convert-multiple-br -tag-to-a-single-br-tag-in-php regex chính xác phải là/^ ( \ s *) +/ thay đổi nó và tôi sẽ đánh dấu câu trả lời là được chấp nhận – Thanos

4

Bạn đã quên delimiters for PCRE trong cụm từ thông dụng của mình. Hãy thử điều này:

$string = preg_replace('/^\s*(?:<br\s*\/?>\s*)*/i', '', $string); 

Điều này cũng sẽ xóa các ký tự khoảng trắng trước, giữa và sau thẻ ngắt dòng.

Một số giải thích:

  • ^\s* sẽ phù hợp với bất kỳ ký tự khoảng trắng vào lúc bắt đầu của chuỗi của bạn
  • (?:<br\s*\/?>\s*)* sẽ phù hợp không hay nhiều lần xuất hiện của BR thẻ (bao gồm cả HTML và XHTML) tiếp theo là ký tự khoảng trắng không bắt buộc
2
$string = preg_replace('@^(<br\\b[^>]*/?>)[email protected]', '', $string); 

Nên khớp:

<br> 
<br/> 
<br style="clear: both;" /> 
etc 
+0

Cẩn thận ngay bây giờ - người hỏi muốn nó hoạt động trên một tập hợp HTML giới hạn cụ thể, cho phép tránh [Cthulu] (http: // stackoverflow.com/questions/1732348/regex-match-open-tags-ngoại trừ-xhtml-self-contained-tags). Madness nằm trong con đường của "etc" của bạn. :) Mặc dù tôi đồng ý,
là đủ phổ biến để xem xét, do đó, upvoted. – Jerph

+0

Điều này dường như làm việc cho những gì tôi đang tìm kiếm. Điều này có hoạt động trên bất kỳ thẻ '
' hợp lệ nào không? – qitch

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