2013-08-07 164 views

回答

8

可以使用不願意量詞.*?

\*\*.*?\*\* 

假定它是由您的正則表達式引擎支持。

+2

+1。 – brianmearns

1

使用一個or

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

匹配的組裏面,這將匹配是不是明星,還是明星後跟一個非星級任何字符。假設第一個發生雙星(**)表示字符串文字結束。如果字符串內容是以星號結尾(如**my string ends with a star***),則我的正則表達式將不包含匹配中的最後一顆星號(因此字符串內容將僅爲「my string ends with a star」)。但我認爲這是剛纔描述的有效。

然而,如果與像***Star Power!**明星字符串文字開始,它將包括在字符串內容的球星,我認爲也是有效的,因爲**第一次出現標誌着字符串的開頭文字,下面單*只是內容的一部分。

另外,請注意,您不需要在字符類內部轉義星星(在大多數實現中)。

+0

然而,它會匹配一個字符串文字開始處的單個星形,'***,比如這個**' –

+0

在這裏測試一下:http://regex101.com/r/vV8jT5 – brianmearns

+0

「結束之星不工作(可能不應該)...開始明星作品(可能應該)「...掃管笏? –

0

您可以使用此模式:

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

它將匹配任何對*字符,後跟零個或多個其他比*或任何字符**其他字符包圍,緊接着又一對*個字符。

+0

如果字符串文字以星號開頭,則***不匹配,***如此。** – brianmearns

+0

@ sh1ftst0rm爲true,但未將其指定爲要求。完全有可能OP希望'*** test **'僅僅匹配'test'而不是'* test'。 –

+0

你說得對,沒有明確提及。但假設從左到右解析,第一次出現'**'標記字符串和所有後續內容的開始,直到下一次出現'**'是字符串的一部分。像在C中一樣,''評論'被視爲' /評論',而不是'評論'。 – brianmearns

0

如果你不想使用不情願的量詞您可以使用此:

\*\*((?:[^*]|[*](?=[^*]))+)\*\* 

說明:這將匹配以外的任何字符「*」或'*'之間沒有一個'*'之後的'**'

相關問題