2009-08-27 63 views
6

Dưới đây là thông điệp Twitter Tôi cố gắng để phân tích cú pháp (như bạn có thể thấy, một số trong số này là không thẻ, chỉ là một phần của URL):Regular Expression cho Parsing hashtags trong Java

#anothertag Arrogance and bad PR http://www.adobe.com/index.html#anchor1. John 
Nack on &#Adobe: Information about Photoshop© CS3 on Snow Leopard 
#fail #design</pre> 

biểu thức chính quy này là những gì tôi có cho đến nay, nhưng nó vẫn chọn một số thẻ url:

[##]+([A-Za-z0-9-_]+) 
+0

Vậy chính xác bạn đang cố gắng làm gì? Bạn có thể cung cấp kết quả mong đợi không? – serg

+0

Xin lỗi, tôi nên rõ ràng hơn. Tôi đang cố gắng làm một trận đấu để tìm thấy tất cả các thẻ trong một tweet đã cho. Tôi hy vọng rằng các tweet từ phía trên sẽ trả về 'anothertag', 'fail' và 'design'. –

+0

Bạn đã thử cái này chưa? http://stackoverflow.com/questions/1563844/best-hashtag-regex/5768660#5768660 Cung cấp regex cung cấp dựa trên mã của Twitter và nếu tôi đọc đúng, nó đảm bảo rằng thông báo không bắt đầu bằng dấu thăng. Nếu bạn muốn vô hiệu hóa, bạn có thể loại bỏ nhóm dấu ngoặc đơn đầu tiên. Nên đề cập đến rằng tôi đã không được thử nghiệm này regex cá nhân mặc dù :) – johncip

Trả lời

6

Không phải thật mỉa mai, ngay sau khi tôi đăng bài này tôi tìm thấy câu trả lời. Vì vậy, nếu bạn đang tìm kiếm một mẫu phù hợp để thực hiện việc này, những điều sau có vẻ như hoạt động:

(?: \ S | \ A) [##] + ([A-Za-z0-9 -_] +)

Tôi sẽ làm nhiều thử nghiệm hơn với điều này để xem liệu có trường hợp cạnh nào nằm ngoài phạm vi của biểu thức này và sẽ báo cáo lại nếu tôi tìm thấy bất kỳ trường hợp nào.

+5

(?: \ s | \ A | ^) [##] + ([A-Za-z0-9 -_] +) cũng chấp nhận thẻ bắt đầu bằng # ở đầu của tweet – benjguin

3

Tôi nghĩ rằng đây

(\s|\A)#(\w+) 

hoạt động như tốt và là một chút chính xác hơn. BTW, khi làm việc với các biểu thức chính quy Java, tôi luôn sử dụng regexplanet để kiểm tra các biểu thức của mình. Nhanh hơn nhiều so với thử nghiệm trong Java.

--Hardy

3

@Daniel Dura: [##] điều này được cho là vô nghĩa. Các dấu ngoặc [] được sử dụng để biểu thị các lớp ký tự. [##] giống với [#]. Và [##] + giống với [#] +.

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