2012-04-17 123 views
21

我需要一個正則表達式,它匹配以字邊界結尾的表達式,但不會將連字符視爲邊界。 即得到所有表達式由不包含連字符的正則表達式字邊界

type ([a-z])\b 

匹配,但不匹配例如

type a-1 

改變措辭:我想這個詞邊界運營商\ B的同等物,而不是使用單詞字符類[A-Za-z0-9_],使用擴展類:[A-Za-z0-9_-]

+0

什麼正則表達式引擎你使用 - 這是.NET,JavaScript等? – Jay 2012-04-17 18:00:38

+0

@Jay:我正在使用.NET – eyaler 2012-04-17 18:01:29

回答

19

可以使用前瞻爲此,最短的是使用負前瞻:

type ([a-z])(?![\w-]) 

(?![\w-])將意味着「如果接下來的文字是\w或者是-失敗的比賽」。

下面是一個使用正常的前瞻選項:

type ([a-z])(?=[^\w-]|$) 

您可以閱讀(?=[^\w-]|$)因爲如果接下來的文字是在字符類[\w-]「只匹配,或者這是的結束串」。

看到它的工作:http://www.rubular.com/r/NHYhv72znm

+2

這可以在沒有查找的情況下完成嗎? – eyaler 2012-05-28 02:27:08

4

我有一個非常類似的問題,除了我不想考慮「*」爲界人物。下面是我所做的:

\b(?<!\*)[^\s\*]+)\b(?!*) 

基本上,如果你在一個單詞邊界,回頭看一眼的性格和不匹配,如果前一個字符是一個「*」。如果你在中間,不要在空格或星號上匹配。如果你在最後,確保結尾不是星號。在你的情況下,我認爲你可以使用\ w而不是\ s。對我來說,這個工作在這些情況下:

*word 
wo*rd 
word* 
+2

您的正則表達式的語法無效 – MaxZoom 2015-03-06 15:44:22

相關問題