2009-06-21 19 views
6

Có tiện ích nào sẽ chuyển đổi POSIX sang PCRE cho PHP không? Tôi hơi bối rối bởi hướng dẫn sử dụng PHP trên PCRE, và trong khi tôi sẽ cố gắng tìm thêm thông tin về PCRE, tôi đã tự hỏi liệu có ai đã thiết kế một tiện ích như vậy không.Có tiện ích nào sẽ chuyển đổi POSIX sang PCRE cho PHP không?

Hoặc, nếu có ai có thể giải thích làm thế nào để chuyển đổi sau đây, mà sẽ còn được tốt:

ereg("^#[01-9A-F]{6}$", $sColor) 

Nhưng xin giải thích như thế nào nó được thực hiện, không chỉ cho tôi biết sự chuyển đổi.

+1

thú vị bạn viết 01-9, tại sao không 0-9? – VolkerK

Trả lời

6

preg_match("/^#[01-9A-F]{6}$/", $sColor)
Trong trường hợp này, bạn chỉ cần thêm hai dấu phân tách.

Trong perl bạn có thể viết một cái gì đó như

if (s =~ /x.+y/) { print "match"; }
Như bạn có thể thấy biểu thức chính quy thực tế được đóng gói trong //. Nếu bạn muốn đặt tùy chọn trên cụm từ thông dụng, bạn đặt tùy chọn đó sau biểu thức thứ hai /, ví dụ: chuyển biểu thức thành không đồng ý theo mặc định /x.+y/U
pcre bây giờ mô phỏng hành vi này. Mặc dù bạn phải gọi một hàm, bạn cũng phải cung cấp các dấu phân cách và thiết lập các tùy chọn sau dấu tách thứ hai. Trong perl dấu phân cách phải là /, với pcre bạn có thể chọn tự do hơn
preg_match("/^#[01-9A-F]{6}$/", $sColor) 
preg_match("!^#[01-9A-F]{6}$!", $sColor) 
preg_match("#^\#[01-9A-F]{6}$#", $sColor) // need to escape the # within the expression here 
preg_match("^#[01-9A-F]{6}$", $sColor)
tất cả như nhau với pcre, tốt nhất để chọn một ký tự không xuất hiện trong biểu thức.

-1

Nhân tiện, PHP hỗ trợ cả biểu thức chính quy PCRE và POSIX. Đây là phần của hướng dẫn sử dụng PHP trên biểu thức chính quy POSIX, vì vậy bạn không phải chuyển đổi chúng: http://www.php.net/manual/en/book.regex.php

+2

Tôi biết điều này. Tuy nhiên, POSIX sẽ không được chấp nhận trong PHP 5.3, vì vậy tôi đã tìm cách giữ mọi thứ cập nhật. – waiwai933

+0

Câu trả lời này đã lỗi thời, bạn có thể cập nhật nó không? 'ereg()' không được dùng nữa – HamZa

4

preg_match("/^#[01-9A-F]{6}$/D", $sColor)

Lưu ý D modifier. Mọi người quên nó mọi lúc. Nếu không có nó $ sẽ cho phép một ký tự dòng mới cuối cùng. Một chuỗi như "# 000000 \ n" sẽ chuyển. Đây là sự khác biệt tinh tế giữa POSIX và PCRE.

Và, tất nhiên, [01-9] có thể được viết lại thành [0-9].

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