2013-03-10 51 views
7

Tôi đã viết đoạn mã sau (có nó hoạt động) và tự hỏi tại sao tôi không cần phải thoát khỏi các ký tự '<' và '>' bên trong mẫu vì chúng được coi là ký tự 'đặc biệt' bằng hướng dẫn sử dụng php.php regex thoát các ký tự đặc biệt

http://www.php.net/manual/en/function.preg-quote.php

var_dump(preg_match('/<[A-Za-z][A-Za-z0-9]*>/', "<html>", $matches)); 

echo "<pre>"; 
var_dump(htmlentities($matches[0])); 
echo "</pre>"; 

đầu ra:

int(1) 
string(12) "<html>" 
+0

Xác định ký tự "đặc biệt". Tất cả các nhân vật đều đặc biệt theo cách riêng của họ, bạn biết đấy. :) – tchrist

Trả lời

15

Chỉ các ký tự được liệt kê trên this page cần phải được thoát trong kết hợp regex PHP/thay thế.

Trong khi <> thể hoạt động như delimiter, nó không cần phải được thoát trong ví dụ được vì bạn đã có / (slash) hoạt động như một delimiter.

Đề cập đến các liên kết trong câu hỏi

Các preg_quote() chức năng có thể được sử dụng để thoát khỏi một chuỗi để tiêm vào một mô hình và tham số thứ hai tùy chọn của nó có thể được dùng để xác định dấu phân cách để được thoát.

3

<> không ký tự meta là hầu hết các tình huống.

Tuy nhiên chúng được sử dụng như vậy cho:

  • nhóm chụp tên (?P<name>)
  • khẳng định lookbehind (?<=...)

Vì vậy, đó là lý do tại sao preg_quote đóng nó an toàn và thoát khỏi chúng. Có thể cho là dư thừa, vì việc thoát (? sẽ là đủ. Nhưng nó cũng không đau.

+0

+1 câu trả lời đúng. –

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