Tự hỏi nếu có ai ngoài kia có thể làm sáng tỏ về lý do tại sao các biểu thức chính quy sau đây là không khi sử dụng chức năng preg_match PHP: -"preg_match(): Compilation failed: ngoặc chưa từng có" trong PHP cho mô hình hợp lệ
<?php
$str = '\tmp\phpDC1C.tmp';
preg_match('|\\tmp\\([A-Za-z0-9]+)|', $str, $matches);
print_r($matches);
?>
Điều này dẫn đến thông báo lỗi "preg_match(): Biên soạn không thành công: dấu ngoặc đơn chưa khớp" mặc dù thực tế là mẫu có vẻ hợp lệ. Tôi đã thử nghiệm nó với một số trực tuyến PHP Regular Expression tester và công cụ Linux Kiki. Có vẻ như PHP đang thoát khỏi dấu mở ngoặc chứ không phải dấu gạch chéo ngược.
Tôi đã giải quyết vấn đề bằng cách sử dụng str_replace để hoán đổi dấu gạch chéo ngược cho các chuyển tiếp. Điều này làm việc cho tình hình của tôi nhưng nó sẽ được tốt đẹp để biết tại sao biểu thức chính quy này là không.
Nó được kèm theo trong dấu nháy đơn, là nó thực sự cần thiết để thoát khỏi nó hai lần? – Zombaya
Thực hiện tốt, nhắc tôi về một số regexe điên mà tôi đã sử dụng trong quá khứ, ví dụ: 'sed/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ – Petah
@Zombaya: Có, nhưng chỉ khi đó là một dấu gạch chéo ngược thực sự bạn đang cố mã hóa. –