2010-08-03 15 views
36

Tôi thấy rất nhiều ví dụ về việc sử dụng pathPattern để xác định bộ lọc ý định cho một loại/phần mở rộng tệp cụ thể; ví dụ: pathPattern=".*\\.xyz".pathPattern để khớp với đuôi tệp không hoạt động nếu một khoảng thời gian tồn tại ở nơi khác trong tên tệp?

Thật không may, điều này dường như không hoạt động đúng nếu tệp được đề cập có khoảng thời gian khác trong đường dẫn; ví dụ "my.filename.xyz".

Có cú pháp pathPattern khớp với cả "myfilename.xyz" và "my.filename.xyz" không?

Trả lời

37

Nhóm Android đã chọn một cách không may để triển khai pathPattern. Bạn có thể có một cái nhìn tại như thế nào phù hợp với mô hình được thực hiện trong lớp android.os.PatternMatch:.

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/PatternMatcher.java

Chúng tôi đang sử dụng để làm việc * giống như trong một biểu thức chính quy, nơi mà các trận đấu * tham lam và sẽ phù hợp với nhiều nhân vật nhất có thể. Trong triển khai của PatterMatch, trận đấu không tham lam. . * Sẽ khớp với nhiều ký tự nhất có thể, cho đến khi nó tìm thấy kết quả phù hợp cho ký tự tiếp theo trong chuỗi.

Ví dụ:

String: "/mnt/my.file.mytype"
pathPattern: "*" ". * \\ MyType"

Các trong pathPattern sẽ phù hợp với chuỗi con "/ mnt/my" và do đó sẽ không khớp với chuỗi.

Với giới hạn này, tôi không thấy cách viết PathPattern có thể khớp với bất kỳ chuỗi nào kết thúc bằng ".mytype". Điều tốt nhất bạn có thể làm là làm theo giải pháp của Jason để thêm các mẫu bổ sung để phù hợp với các đường dẫn với nhiều dấu chấm khi bạn sẵn sàng chỉ định các mẫu.

39

Chạy cùng một vấn đề khi cố gắng mở tệp trong thư mục dấu chấm. Tôi thấy rằng tôi chỉ có thể thêm nhiều phần tử "dữ liệu", tùy thuộc vào số lượng dấu chấm mà tôi mong đợi có trong các đường dẫn của tôi:

Xấu xí. Bất cứ ai biết một cách tốt hơn?

+3

Vâng .. không quan trọng nếu một con mèo có màu đen hoặc trắng, miễn là nó bắt chuột. Cám ơn vì cái này! – Bruce

+0

Làm thế nào về ''? Điều này có hiệu quả không? Nếu nó hoạt động giống như một regex thì có lẽ điều này cũng có thể hoạt động: ''? – Sourabh

+0

ngay cả khi nó hoạt động, nó không được tài liệu (-> không được hỗ trợ), do đó chúng tôi đang mắc kẹt với giải pháp của Jason ... (kudos!) – Rick77

6

Tôi sử dụng này:

<activity 
    android:name=".activity.GifActivity" 
    android:label="Cool Player ^_^"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="http"/> 
     <data android:scheme="https" /> 
     <data android:host="*"/> 
     <data android:pathPattern="/.*\\.mp4"/> 
    </intent-filter> 
</activity> 

này sẽ mở ra sau url:

Sẽ không o bút lên sau:

Tôi nghĩ rằng mấu chốt ở đây là host="*". Tôi đã không thực hiện nghiên cứu kỹ lưỡng về điều này.Nhưng nó làm việc cho tôi, hy vọng nó giúp một người nào đó ra khỏi đó quá.

+0

Tôi đã cố gắng kết hợp http://www.umaplay.com/2322-tingo_fuse-odg-mp3 bằng cách sử dụng "/.*-mp3" nhưng dường như không khớp. Có điều gì tôi đang thiếu? – frostymarvelous

+0

Tôi đã tìm ra từng bước gỡ lỗi trình ghép mẫu. "-" đầu tiên như trong "-tingo" làm cho nó thất bại. May mắn thay, tôi biết sẽ chỉ có 3 hypens để giải pháp của tôi trở thành "/.*-.*-.*-mp3" – frostymarvelous

+1

Mục đích của dấu gạch chéo đầu tiên là gì? –

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