2013-02-19 97 views
0

我有一些文字限制正則表達式字邊界

"Lorem ipsum dolor sit amet, consectetuer adipiscing elit." 

而且我有一個正則表達式,即從用戶輸入產生。

@".*ip.*" 

這與您所期望的整條線相匹配,所以我用字邊界包裹了這個表達式。

@"\b.*ip.*\b" 

由於處理器是貪婪的,所以仍然匹配整個文本。所以,我試着讓重複懶惰。

@"\b.*?ip.*?\b" 

這是更好,但比賽

  1. Lorem ipsum
  2. dolor sit amet, consectetuer adipiscing

我怎麼能延長原單@".*ip.*"模式,使其匹配懶洋洋整個單詞和捕捉?

  1. ipsum
  2. adipiscing

regex tester回答這個問題也許有用

+0

你可以使用捕捉組像'\ b(。*?ip。*?)\ b'然後在組1 – 2013-02-19 13:48:21

+0

@ExplosionPills中捕獲「ip」字,這在我在鏈接的測試器中嘗試時似乎不起作用。 – Jodrell 2013-02-19 14:00:18

回答

5

爲什麼不直接使用\w*代替.*?

@"\w*ip\w*" 

這也將匹配_0-9,因爲它包含在\w中。如果你想排除它,你可以明確地使用[a-zA-Z]*而不是\w

+0

不會返回包含「ip」的單詞前面的所有單詞嗎?我以爲他只想要包含「ip」的單個單詞 – Guido 2013-02-19 13:55:28

+0

'ipsu-m'怎麼辦? – 2013-02-19 13:56:49

+0

@Guido。他只想要沒有包含「ip」的非單詞字符的單詞。我猜。 – 2013-02-19 13:57:10

1

您已經接近解決方案。僅僅通過非空格轉義序列\ S更換點(任何字符):

@"\b\S*?ip\S*?\b" 
1

我覺得有些話可以帶連字符,所以最好使用模式[\w-]*ip[\w-]*