2011-09-11 70 views
24

Điều này có vẻ như nó không đáng kể, nhưng tôi không tốt với các biểu thức chính quy, và điều này dường như không dễ dàng với Google.Kết hợp Regex bắt đầu và kết thúc chuỗi

Tôi cần regex bắt đầu bằng chuỗi 'dbo'. và kết thúc bằng chuỗi '_fn'

Cho đến khi tôi quan tâm, tôi không quan tâm những ký tự nào nằm giữa hai chuỗi này, miễn là đầu và cuối là chính xác.

Điều này phù hợp với các chức năng trong cơ sở dữ liệu máy chủ SQL.

Ví dụ:

dbo.functionName_fn - Match 

dbo._fn_functionName - No Match 

dbo.functionName_fn_blah - No Match 

Trả lời

21

Nếu bạn đang tìm kiếm lần truy cập trong văn bản lớn hơn, bạn không muốn sử dụng ^$ như một số người phản hồi khác đã nói; những cái khớp với phần đầu và cuối của văn bản. Hãy thử điều này thay vì:

\bdbo\.\w+_fn\b 

\b là một word boundary: nó phù hợp với vị trí đó, hoặc là trước bởi một nhân vật từ và không theo sau là một, hoặc theo sau là một nhân vật từ và không đi trước một. regex này sẽ tìm thấy những gì bạn đang tìm kiếm trong bất kỳ của các chuỗi:

dbo.functionName_fn 
foo dbo.functionName_fn bar 
(dbo.functionName_fn) 

... nhưng không phải trong này một:

foodbo.functionName_fnbar 

\w+ trận đấu một hoặc nhiều "nhân vật từ" (chữ , chữ số hoặc _). Nếu bạn cần một cái gì đó bao gồm hơn, bạn có thể thử \S+ (một hoặc nhiều ký tự không khoảng trắng) hoặc .+? (một hoặc nhiều ký tự bất kỳ ngoại trừ linefeeds, không tham lam). Các tham số +? không tham lam ngăn không cho nó vô tình khớp với thứ gì đó như dbo.func1_fn dbo.func2_fn như thể nó chỉ là một lần truy cập.

+0

Tôi có một câu hỏi mà tôi không biết liệu bạn có biết hay không. Trong flex \ b không được hỗ trợ. Bạn có bất kỳ ý tưởng để thực hiện \ b trong flex? – Linda

12
^dbo\..*_fn$ 

này nên làm việc cho bạn.

+3

FYI:^Có nghĩa là sự khởi đầu của một chuỗi, $ có nghĩa là kết thúc của một chuỗi. –

+0

@Daniel A. White là gì \ .. * được sử dụng cho? – eawedat

+2

@eawedat, '\ .' là dành cho dấu chấm,'. * 'Là dành cho chuỗi ký tự không bị ràng buộc của bất kỳ ký tự nào. –

6

Vâng, regex đơn giản là thế này:

/^dbo\..*_fn$/ 

Sẽ tốt hơn, tuy nhiên, để sử dụng chức năng chuỗi thao tác của bất cứ ngôn ngữ lập trình bạn đang sử dụng để cắt ra bốn đầu tiên và cuối cùng ba ký tự của chuỗi và kiểm tra xem chúng là những gì bạn muốn.

+0

Đồng ý về thao tác chuỗi. Tuy nhiên, tôi đang sử dụng điều này trong CodeSmith Generator, và không có quyền truy cập vào nguồn. Cảm ơn, mặc dù! –

+0

@onesomeday Cái gì \ .. * được sử dụng cho? – eawedat

+0

@eawedat Nó có nghĩa là một chữ. ký tự theo sau bởi 0 hoặc nhiều hơn bất kỳ ký tự nào khác. – lonesomeday

0
\bdbo\..*fn 

tôi đang tìm kiếm thông qua một tấn mã java cho một thư viện cụ thể: car.csclh.server.isr.businesslogic.TypePlatform (mặc dù tôi chỉ biết carPlatform vào thời điểm đó). Thật không may, không có gợi ý nào khác ở đây có hiệu quả đối với tôi, vì vậy tôi nghĩ rằng tôi sẽ đăng bài này.

Đây là regex tôi sử dụng để tìm nó:

\bcar\..*Platform 
Các vấn đề liên quan