2010-06-29 41 views
15

Tôi đang tìm kiếm từ khóa trong chuỗi thông qua cụm từ thông dụng. Nó hoạt động tốt cho tất cả các từ khóa, exept một trong đó có một dấu gạch chéo về phía trước trong nó: "thời gian/phát ra".biểu thức chính quy và dấu gạch chéo chuyển tiếp

Thậm chí sử dụng preg_quote($find,'/'), mà thoát nó, tôi vẫn nhận được thông báo:

Unknown modifier 't' in /frontend.functions.php on line 71 

Nếu tôi in các mô hình tìm kiếm, nó cho thấy /time\\/emit/. Không có preg_quote, nó hiển thị /time/emit/ và cả hai đều trả về cùng một thông báo lỗi.

Bất kỳ chút kiến ​​thức nào cũng hữu ích.

Trả lời

31

Cố gắng bắt đầu và kết thúc biểu thức chính quy của bạn với dấu hiệu khác với/

Cá nhân tôi sử dụng `

Tôi đã nhìn thấy những người sử dụng #

Tôi nghĩ rằng hầu hết các ký tự là tốt. Bạn có thể đọc thêm về nó ở đây: http://pl.php.net/manual/en/regexp.reference.delimiters.php

Như thế này:

preg_match('#time/emit#', $subject); // instead of /time/emit/ 

Nói một cách khác: biến $find của bạn nên chứa khá # thời gian/phát ra # hơn/lần/phát/

+0

các đánh dấu trở lại đã làm các trick! – pixeline

+0

Giải pháp thanh lịch đã giải quyết tất cả những cơn đau đầu của tôi với nhân vật chém. – Seth

0

bit mã?

'regex' cho cụm từ cụ thể đó trông giống như '/ time/emit /'. Với một tập hợp các từ khóa có thể có một phương pháp hiệu quả hơn để xem những gì bạn đang làm sẽ tốt.

2

Dường như bạn có một cái gì đó đã thoát nó ..

preg_quote('time/emit') // returns time\/emit 
preg_quote('time\/emit') // returns time\\/emit 

như một hack bạn chỉ có thể làm:

preg_quote(stripslashes($find)) // will return time\/emit 
0

này nên làm việc:

$a="Hello////////"; 
$b=str_replace($a,"//","/"); 
echo $b; 
Các vấn đề liên quan