Tôi vẫn đang học rất nhiều về PHP và thay đổi chuỗi là điều mà tôi quan tâm. Tôi đã sử dụng preg_match trước đây cho những thứ như xác nhận địa chỉ email hoặc chỉ tìm kiếm các yêu cầu.Cách preg_match_all() xử lý các chuỗi?
Tôi vừa xuất phát từ bài đăng này What's wrong in my regular expression? và tò mò là tại sao hàm preg_match_all tạo 2 chuỗi, 1 w/một số ký tự bị tước và sau đó là w/đầu ra mong muốn.
Từ những gì tôi hiểu về hàm là nó đi qua ký tự chuỗi ký tự bằng cách sử dụng RegEx để đánh giá việc cần làm với nó. RegEx này có thể được cấu trúc theo cách như vậy để bỏ qua mục nhập mảng đầu tiên và chỉ tạo ra kết quả mong muốn không?
và do đó bạn không cần phải đi đến các chủ đề khác
$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-
[email protected]~';
preg_match_all('/\^([^^]*?)\~/', $str, $newStr);
for($i=0;$i<count($newStr[0]);$i++)
{
echo $newStr[0][$i].'<br>';
}
echo '<br><br><br>';
for($i=0;$i<count($newStr[1]);$i++)
{
echo $newStr[1][$i].'<br>';
}
chí này ra
^Jony ~
^Smith ~
^[email protected]~
Jony
Smith
[email protected]
Tôi tò mò nếu lý do cho 2 mục nhập mảng là do sytax gốc của chuỗi hoặc nếu đó là phản hồi xử lý bình thường của hàm. Xin lỗi nếu điều này không nên ở đây, nhưng tôi thực sự tò mò về cách thức hoạt động của nó.
cảm ơn, Brodie
Đầu ra sẽ luôn chứa toàn bộ kết quả phù hợp và mục nhập cho từng nhóm chụp trong biểu thức của bạn. –
Không phải là câu trả lời, nhưng thú vị cần lưu ý ở đây là cờ 'PREG_SET_ORDER', sẽ trả về một danh sách kết quả đơn giản hơn. Và trong khi bạn không thể xóa mục nhập mảng '[0]' cho đối sánh hoàn chỉnh, bạn có thể tách nội dung của nó bằng cách sử dụng '\ K' trong regex. – mario