2012-04-13 40 views
17

Tôi đã đọc nhiều hướng dẫn về regex nhưng nó sẽ không dính vào đầu tôi. Tôi không bao giờ có thể làm cho các mẫu của tôi hoạt động. Hy vọng ai đó có thể giúp đỡ.Php tìm chuỗi với regex

Tôi có một biến php ($ content) nơi tôi cần phải tìm một khuôn mẫu nhất định mà trông giống như

này [gallery :: tên/của/thư mục/thư mục /]

Tôi muốn tìm kiếm:

- starting with "[gallery::" 
- any other character (variable length) 
- ending with "]" 

cho đến nay, trong PHP tôi có:

preg_match('/\[gallery\:/', $content, $matches, PREG_OFFSET_CAPTURE); 

tôi có thể tìm [gallery: nhưng đó là nó . Tôi muốn tìm phần còn lại (: name/of/the/folder /])

Bất kỳ trợ giúp nào được đánh giá cao! Cảm ơn!

Trả lời

26

Cố gắng nắm bắt nó:

preg_match("/\[gallery::(.*?)]/",$content,$m); 

Bây giờ $m là một mảng:

0 => [gallery::/name/of/the/folder/] 
1 => /name/of/the/folder/ 
+0

Nếu chuỗi được 'bắt đầu bằng' một cái gì đó, hãy chắc chắn để thêm vào trước một '^' nhân vật để "\\ [gallery" – AndrewPK

+0

sẽ không nhiều lần xuất hiện ([gallery ::/tên/của/thư mục/thư mục /] [gallery ::/name/of/the/folder /]) gây ra vấn đề với việc sử dụng tính năng chụp tham lam trên tất cả các ký tự? –

+0

điều này sẽ khớp với '[gallery ::]' tôi sẽ thay đổi nó thành '[gallery :: (. +?)]' – nathanjosiah

2

thay đổi regex của bạn để

'/\[gallery::([A-Za-z\/]+)\]/' 

Kể từ khi tôi đặt phần thư mục/path trong ngoặc, bạn sẽ có được một nhóm nắm bắt ra khỏi nó.

+0

Cần một ':', không cần thoát, và nếu bạn cần khớp '/' bạn nên sử dụng một ký tự phân cách khác như '#' – DaveRandom

+0

'[A-Za-z]' cho một điều chỉ khớp với một ký tự , nhưng nó không khớp với "tất cả các ký tự" - và chắc chắn không phải là những cái được cho phép trong tên tập tin. –

+0

@Kolink, lưu ý dấu + sau khi các parens –

0
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) { 
    echo "A match was found."; 
} else { 
    echo "A match was not found."; 
}