2011-09-11 164 views
24

這似乎應該是微不足道的,但我對正則表達式不太好,這對谷歌來說似乎並不容易。正則表達式匹配的開始和結束字符串

我需要一個以字符串'dbo'開頭的正則表達式。並以字符串'_fn'結尾

就我而言,我不在乎這兩個字符串之間的字符是什麼,只要開始和結束都是正確的。

這是爲了匹配SQL服務器數據庫中的函數。

例如:

dbo.functionName_fn - Match 

dbo._fn_functionName - No Match 

dbo.functionName_fn_blah - No Match 

回答

21

如果您在較大文本內搜索匹配,則不需要像其他響應者所說的那樣使用^$;那些匹配文本的開始和結束。試試這個:

\bdbo\.\w+_fn\b 

\bword boundary:這是無論是單詞字符開頭,而不是跟着一個,或後跟一個字字符,而不是由一個前面的位置相匹配。此正則表達式會發現你在任何這些字符串找什麼:

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

...但不是在這一個:

foodbo.functionName_fnbar 

\w+匹配一個或多個「單詞字符」(字母,數字或_)。如果您需要更具包容性的內容,可以嘗試使用\S+(一個或多個非空白字符)或.+?(一個或多個除換行符以外的任何字符,非貪婪)。非貪婪+?可以防止它意外地匹配dbo.func1_fn dbo.func2_fn之類的東西,就好像它只是一次命中一樣。

+0

我有一個問題,我不知道你是否知道它。在flex \ b不支持。你有什麼想法在Flex中實現\ b? – Linda

12
^dbo\..*_fn$ 

這應該工作你。

+3

FYI:^表示字符串的開頭,$表示字符串的結束。 –

+0

@丹尼A.白什麼\ .. *用於? – eawedat

+2

@eawedat,'\ .'用於點本身,'。*'用於任何字符的無界序列。 –

6

好了,簡單的regex是這樣的:

/^dbo\..*_fn$/ 

這將是更好的,但是,使用任何編程語言,您使用的是切掉前四的字符串操作功能,並且過去三年字符串的字符並檢查它們是否是你想要的。

+0

同意字符串操作。但是,我在CodeSmith Generator中使用它,並且無法訪問源代碼。不過謝謝! –

+0

@onesomeday什麼是\ .. *用於? – eawedat

+0

@eawedat它意味着一個文字。字符後跟0或更多的任何其他字符。 – lonesomeday

0
\bdbo\..*fn 

我一直在尋找通過特定庫一噸的Java代碼:car.csclh.server.isr.businesslogic.TypePlatform(雖然我只知道carPlatform的時間)。不幸的是,這裏沒有其他的建議爲我工作,所以我想我會張貼這個。

這是我用來尋找它的正則表達式:

\bcar\..*Platform 
相關問題