2015-09-30 34 views
6

Tôi biết rằng vấn đề liên quan đến ký hiệu đô la "$" trong regex (ở đây: hoặc trong PHP và JavaScript) đã thảo luận nhiều lần trước đây: Vâng, tôi biết rằng tôi cần phải thêm dấu gạch chéo ngược "\" trước mặt nó (tùy thuộc vào việc xử lý chuỗi ngay cả hai), nhưng cách chính xác để khớp với dấu đô la là "\ $". ... Đã ở đó, làm điều đó, hoạt động tốt.


Nhưng đây là vấn đề mới của tôi: Ký hiệu đô la "\ $" bên cạnh ranh giới từ được đánh dấu bằng "\ b". ... Ví dụ sau của tôi có thể dễ dàng được sao chép trên ví dụ: regexpal.com.

Hãy bắt đầu với các văn bản sau đây để tìm kiếm trong:

Dollar 50

Dollars 50

$ 50

USD 50

regex của tôi nên tìm hoặc "USD", "Dollar" hoặc "$". Dễ dàng đủ: Chúng ta hãy thử

(USD | Dollar | \ $)

thành công: Nó tìm thấy "$", những "USD", và cả hai "Dollar" xuất hiện, kể cả trong "Dollars ".

Nhưng chúng ta hãy cố gắng bỏ qua "đô la" bằng cách thêm ranh giới từ sau khi lựa chọn nhiều:

(USD | Dollar | \ $) \ b

Và đây là rắc rối: " USD "là phù hợp," đô la "là phù hợp," đô la "bị từ chối ... Nhưng duy nhất, đúng backslashed (hoặc thoát)" $ "cũng bị từ chối, mặc dù đó chỉ làm việc một giây trước.

Nó không liên quan đến nhiều lựa chọn bên trong dấu ngoặc: Cố gắng chỉ

\ $

vs

\ $ \ b

và nó chỉ giống nhau: Cái đầu tiên khớp với ký hiệu đô la, dấu thứ hai không.


cuối cùng:

(USD | Dollar | \ $) \ b

với một blank "" giữa ")" và "\ b" thực sự hoạt động . Nhưng cách giải quyết đó có thể không khả thi trong mọi trường hợp (trong trường hợp cần có ranh giới từ không khoảng trắng).


Dường như dấu hiệu đồng đô la thoát được từ chối tìm thấy khi ranh giới từ có liên quan.

Tôi rất muốn nghe đề xuất của bạn để giải quyết bí ẩn này. -- Cảm ơn rất nhiều trước!

+0

Từ [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions): * "Ranh giới từ khớp với vị trí mà ký tự từ không được theo dõi hoặc được đặt trước bằng một ký tự từ khác. "* Tuy nhiên,' $ 'và dấu cách không phải là một ký tự từ. –

Trả lời

2

Không khớp, vì trong $ không có ranh giới từ ngay sau $. Sẽ có, tuy nhiên, nếu một từ bắt đầu ngay sau khi $ - ví dụ

$ triệu

sẽ phù hợp.

gì có thể bạn muốn làm là làm cho \b chỉ áp dụng cho những trường hợp bạn thực sự muốn để phù hợp với một ranh giới từ - ví dụ

(USD\b|Dollar\b|\$) 

này sẽ nhấn mạnh vào đó là một ranh giới từ sau "USD" và sau "Dollar", nhưng không phải sau "$".

+0

'((USD | Dollar) \ b | \ $)' cũng hoạt động –

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