⊗ppPmRgGL 229 of 447 menu

Giới hạn tính tham lam trong biểu thức chính quy trong PHP

Biểu thức chính quy mặc định là tham lam. Điều này có nghĩa là chúng sẽ khớp với số lượng ký tự tối đa có thể.

Hãy cùng phân tích một ví dụ. Giả sử chúng ta có một chuỗi như sau:

<?php $str = 'aeeex zzz x kkk'; ?>

Giả sử trong chuỗi này chúng ta muốn tìm chuỗi con 'aeeex' theo mẫu sau: chữ cái 'a', sau đó là bất kỳ ký tự nào một lần trở lên, rồi đến chữ cái 'x'.

<?php $res = preg_replace('#a.+x#', '!', $str); ?>

Chúng ta mong đợi rằng kết quả trong biến sẽ là chuỗi '! zzz x kkk'. Tuy nhiên, điều đó không xảy ra - biến nhận được chuỗi '! kkk'.

Vấn đề nằm ở chỗ biểu thức chính quy của chúng ta tìm tất cả các ký tự từ chữ cái 'a' đến chữ cái 'x'. Nhưng trong chuỗi của chúng ta có hai chữ cái 'x'. Do tính tham lam, biểu thức chính quy sẽ tìm đến chữ 'x' cuối cùng, do đó khớp với phần không như chúng ta mong đợi.

Tất nhiên, thông thường hành vi này là điều chúng ta cần. Nhưng trong trường hợp cụ thể này, chúng ta muốn hủy bỏ tính tham lam và yêu cầu biểu thức chính quy tìm đến chữ 'x' đầu tiên.

Để giới hạn tính tham lam, cần đặt dấu chấm hỏi sau toán tử lặp:

<?php $res = preg_replace('#a.+?x#', '!', $str); ?>

Tính tham lam có thể được giới hạn cho tất cả các toán tử lặp, như sau: *?, ??{}?.

Cho chuỗi:

<?php $str = 'aba accca azzza wwwwa'; ?>

Hãy viết biểu thức chính quy tìm tất cả các chuỗi mà ở hai đầu là chữ cái 'a', và thay thế mỗi chuỗi đó bằng '!'. Giữa các chữ cái a có thể là bất kỳ ký tự nào (ngoại trừ 'a').

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối