2010-06-18 22 views
12

Tôi đã tìm thấy bài đăng này: Python Regex vs PHP Regex nhưng tôi thực sự không nhận được nếu cú ​​pháp REGEX của Python khớp với cú pháp REGEX của PHP.REGEX có khác biệt từ PHP đến Python

Tôi bắt đầu chuyển đổi một số mã PHP cũ của tôi thành python (do appengine của g, v.v.), và bây giờ tôi muốn biết liệu regex có chuyển đổi 100% hay không, bằng cách copy đơn giản &.

liên quan,

Trả lời

9

Python sử dụng cú pháp tương tự như cú pháp Perl và PHP sử dụng cú pháp Perl Compatible Regular Expressions, vì vậy nó sẽ gần như giống nhau. Đọc về khả năng differences.

Sự khác biệt thực sự duy nhất là trong PHP, biểu thức phải được đặt trong delimiters.

+0

+ câu trả lời đúng, tất cả những câu trả lời khác cũng phù hợp, nhưng câu trả lời của bạn phù hợp nhất với câu hỏi tôi đã ghi nhớ =) Nhờ tất cả những người khác, tôi sẽ cung cấp +1 cho mỗi câu trả lời/nhận xét chính xác/ –

1

Tôi tin rằng chúng ít nhất là tương thích, tức là> 2/3. Có thể có một số phần mở rộng ngôn ngữ cụ thể ở cả hai phía, nhưng cốt lõi chắc chắn là giống nhau. Xác nhận này chỉ dựa trên kinh nghiệm cá nhân của tôi (có giới hạn), vì vậy hãy lấy nó bằng một hạt muối.

Cả hai cách triển khai đều dựa trên các regex của Perl, nếu tôi không nhầm.

1

Không chắc chắn về câu trả lời đúng, nhưng tôi đã tìm thấy một công cụ tuyệt vời sẽ giúp bạn kiểm tra.

http://re.dabase.com/

Cheers!

+0

404, không tìm thấy. – Qaz

+0

Thay vào đó hãy thử dùng regex101.com hoặc regexpal.com. – Qaz

1

Sau một nghiên cứu rất nhanh chóng, tôi phát hiện ra rằng sự khác biệt chính là:

PHP(có delimiters)

/ REGEX/# "/" in front and at the end 

Python(đã có delimiters)

REGEX # no surrounding by any characters 
+2

Như được chỉ ra bởi Felix, dấu gạch chéo về phía trước được gọi là dấu phân cách. –

1

Các công cụ biểu thức chính quy được xây dựng thành các ngôn ngữ khác nhau thường có sự khác biệt ngay cả khi cú pháp chung giống nhau. PHP xảy ra có nhiều công cụ biểu thức chính quy được tích hợp sẵn (POSIX và PCRE), do đó tùy thuộc vào các hàm biểu thức chính quy nào bạn đang sử dụng sẽ phụ thuộc vào mức độ chuyển đổi của chúng.

Nếu bạn chủ yếu sử dụng các chức năng preg_* thì những chức năng đó chủ yếu nên chuyển đổi mà không có vấn đề, tuy nhiên tôi tin việc triển khai python của biểu thức chính quy thiếu một số tính năng nâng cao hơn.

Bạn có thể đọc về PHP's regular expressions herePython's regular expressions here và tìm ra một số nội dung cụ thể hơn.

Câu hỏi hay, nhưng khó đưa ra câu trả lời hoàn chỉnh vì có nhiều biến.

9

Chúng tương thích với hầu hết các phần. Tuy nhiên, có một số khác biệt, ngoài cú pháp khác nhau (/regex/ trong PHP so vớire.compile(r"regex") bằng Python):

  1. PCRE hỗ trợ \Q...E để thoát metacharacters, Python không.
  2. PCRE hỗ trợ \cA-\cZ đối sánh ký tự điều khiển, Python thì không.
  3. Dấu gạch ngang trong [\d-z] hoặc [a-\d] là chữ viết bằng PHP, không phải bằng Python.
  4. PCRE hỗ trợ \z (cuối chuỗi), Python không, chỉ \Z (cuối chuỗi trước dòng tùy chọn cuối cùng).
  5. \b sẽ đối sánh các ranh giới từ chỉ xung quanh các ký tự ASCII trong PCRE, bằng Python có thể khớp với ngôn ngữ phụ thuộc nếu tùy chọn được đặt.
  6. Bạn có thể tham khảo \1 v.v. backreferences trước dấu ngoặc ôm của chúng trong PCRE, bạn không thể bằng Python.
  7. Bạn không thể tắt công cụ sửa đổi chế độ trong regex ((?-s) v.v.) bằng Python.
  8. Bạn không nhận được nhóm nguyên tử (?>...) hoặc các định lượng sở hữu (.++) bằng Python, chỉ trong PCRE.
  9. Tầm nhìn có thể có độ dài hữu hạn trong PCRE, phải có độ dài cố định bằng Python.
  10. Không có mẫu \G (vị trí của trận đấu trước đó).
  11. Không có kết hợp điều kiện bằng Python, chỉ trong PCRE: (?(?=regex)then|else).
  12. Không \x1234 cho các điểm mã Unicode khớp với Python. Không có p{L} và kết hợp thuộc tính Unicode khác. Trong PHP, nó phụ thuộc vào cách nó được cấu hình/biên dịch.
  13. Không [:alpha:] Các lớp ký tự POSIX bằng Python.

Thu thập từ regular-expressions.info, để lại một số công cụ bí truyền hơn. Nhưng không nhiều.

Đạo đức: Mua RegexBuddy và sử dụng nó để dịch các regex cho bạn.

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