2011-10-23 115 views
0

我試圖提取由*從字符串使用正則表達式,如串*sample*,在這裏我想提取sample包圍的話,但我無法做出正確的正則表達式特定的詞。提取使用正則表達式

我試過以下正則表達式[*]{1}.*[*]{1}, ^[*]{1}.*[*]{1}$?,但它不起作用。

回答

1

採取下面的例子:

this is a *sample* string, but not *really* 

以下將第一捕獲組中的匹配sample* string, but not *really

\*(.*)\* 

雖然以下將匹配sample作爲第一捕獲組:

\*([^*]*)\* 
+0

我會爲這一個去。如果你的正則表達式支持害羞的匹配,那麼後者的替代公式就是'\ *(。*?)\ *'。 – pico

0

你可以試試這個正則表達式

(?<=\*).*(?=\*) 

如果你的編程語言支持回顧後和預讀。如果你想匹配兩個* S之間的最小可能的文本,那麼你可以去懶惰量詞這樣

(?<=\*).*?(?=\*) 
+0

這會對''* * * * *''或'「* this *和* that *」'做什麼? –

+0

@ muistooshort是的,它是一個貪婪的量詞,它儘可能地在兩個'*'之間匹配。包括懶惰量詞也只是爲了說清楚。 –

0

我的第一個工作正常。您可以在圓括號中添加捕獲組:

[*]{1}(.*)[*]{1} 

但是,這非常冗長。你可以這樣做:

\*(.*)\* 

你用\逃避*因爲它是一個特殊字符。

0

試試這個:

\*[^*]*\* 

這意味着\*:*,[^*]*? 0或多個非*,\*:*

http://gskinner.com/RegExr?2v0e4

現在,如果你不想 「提取」 的*,你可以做這樣的:

(?:\*)([^*]*)(?:\*) 

這將只放一個捕獲組(()部分)的文本,並把*在非捕獲組中((?:)部分)