2011-12-20 49 views

Trả lời

86

Chúng được gọi là định lượng.

* 0 hoặc nhiều hơn các biểu hiện trước

+ 1 hoặc nhiều biểu thức trước

mỗi mặc định một lượng hóa là tham lam, có nghĩa là nó phù hợp như nhiều nhân vật càng tốt.

? sau khi trình định lượng thay đổi hành vi để làm cho định lượng này "không phù hợp", nghĩa là nó sẽ khớp với ít nhất có thể.

Ví dụ tham lam/ungreedy

Ví dụ về chuỗi "abab"

a.*b sẽ phù hợp "abab" (preg_match_all sẽ trở lại một trận đấu, các "abab")

trong khi a.*?b sẽ chỉ khớp với bắt đầu "ab" (preg_match_all sẽ trả lại hai kết quả phù hợp, "ab")

Bạn có thể kiểm tra các regex trực tuyến của mình, ví dụ:trên Regexr, see the greedy example here

+0

Ví dụ thích hợp http://regexr.com/39t01 – Tomas

+0

"lười" là thuật ngữ phổ biến hơn cho "không chấp nhận" –

5

+ tối thiểu một, * cũng có thể bằng 0.

16

Đầu tiên (+) là một hoặc nhiều ký tự. Thứ hai (*) là không hoặc nhiều ký tự. Cả hai đều không tham lam (?) và khớp với bất kỳ thứ gì (.).

+0

... ngoại trừ dòng mới. –

+0

Điều đó phụ thuộc vào nếu bộ sửa đổi được đặt hay không. – Quentin

4

A + khớp với một hoặc nhiều trường hợp của mẫu trước đó. A * khớp với không hoặc hơn trường hợp của mẫu trước đó. Vì vậy, về cơ bản, nếu bạn sử dụng + thì phải có ít nhất một phiên bản của mẫu, nếu bạn sử dụng *, nó sẽ vẫn khớp nếu không có trường hợp nào.

4

+ trận đấu ít nhất một nhân vật

* trận đấu bất kỳ số lượng (bao gồm 0) của nhân vật

Các ? cho thấy một biểu hiện lười biếng, vì vậy nó sẽ phù hợp càng ít nhân vật càng tốt.

3

Một ngôi sao rất giống với dấu cộng, khác biệt duy nhất là khi dấu cộng khớp 1 hoặc nhiều ký tự/nhóm trước, bắt đầu khớp với 0 hoặc nhiều hơn.

2

Hãy xem xét bên dưới là chuỗi phù hợp.

ab 

Các mô hình (ab.*) sẽ trả về một trận đấu cho nhóm chụp với kết quả của ab

Trong khi mô hình (ab.+) sẽ không phù hợp và không quay trở lại bất cứ điều gì.

Nhưng nếu bạn thay đổi chuỗi đến sau, nó sẽ trở lại aba cho mẫu (ab.+)

aba 
+0

Tôi nghĩ đây là câu trả lời hay hơn cụ thể cho câu hỏi của + vs * – Terrence

0

Tôi nghĩ rằng câu trả lời trước thất bại để làm nổi bật một ví dụ đơn giản:

ví dụ chúng ta có một mảng:

numbers = [5, 15] 

Biểu thức chính quy sau ^[0-9]+ đối sánh: 15 o nly. Tuy nhiên, ^[0-9]* khớp với cả hai 5 and 15. Sự khác biệt là các nhà điều hành + đòi hỏi ít nhất một trùng lặp của biểu thức regex trước

0

Trong RegEx, {i,f} có nghĩa là "giữa i-f trận đấu". Chúng ta hãy nhìn vào ví dụ sau đây:

  • {3,7} nghĩa giữa 3-7 trận
  • {,10} nghĩa lên đến 10 trận đấu không có giới hạn thấp hơn (tức là giới hạn thấp là 0)
  • {3,} nghĩa là ít nhất 3 trận đấu không có giới hạn trên (tức là giới hạn cao là vô cực)
  • {,} nghĩa là không giới hạn trên hoặc giới hạn dưới cho số trận (tức là giới hạn dưới là 0 và giới hạn trên là vô cực)
  • {5} phương tiện chính xác 4

ngôn ngữ tốt Hầu hết chứa các chữ viết tắt, thì RegEx:

  • + là viết tắt cho {1,}
  • * là viết tắt cho {,}
  • ? là viết tắt cho {,1}

Điều này có nghĩa là + yêu cầu ít nhất 1 trận đấu trong khi * chấp nhận bất kỳ số trận đấu nào hoặc không có kết quả nào cả và ? chấp nhận không quá 1 trận đấu hoặc 0 trận đấu.

Tín dụng: Codecademy.com

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