正則表達式\*\*([^\*]*)\*\*
我可以匹配文本里面多組**
的如:正則表達式 - 匹配字符串不包含指定字符串字面
this **is** a **test**
返回is
& test
。
鑑於字符串that's **right * a test**
,如何調整我的表達式以返回right * a test
?我怎樣才能讓我的表達排除兩個*
而不是一個?
正則表達式\*\*([^\*]*)\*\*
我可以匹配文本里面多組**
的如:正則表達式 - 匹配字符串不包含指定字符串字面
this **is** a **test**
返回is
& test
。
鑑於字符串that's **right * a test**
,如何調整我的表達式以返回right * a test
?我怎樣才能讓我的表達排除兩個*
而不是一個?
使用一個or
:
\*\*((?:[^*]|\*[^*])*)\*\*
匹配的組裏面,這將匹配是不是明星,還是明星後跟一個非星級任何字符。假設第一個發生雙星(**
)表示字符串文字結束。如果字符串內容是以星號結尾(如**my string ends with a star***
),則我的正則表達式將不包含匹配中的最後一顆星號(因此字符串內容將僅爲「my string ends with a star
」)。但我認爲這是剛纔描述的有效。
然而,如果與像***Star Power!**
明星字符串文字開始,它將包括在字符串內容的球星,我認爲也是有效的,因爲**
第一次出現標誌着字符串的開頭文字,下面單*
只是內容的一部分。
另外,請注意,您不需要在字符類內部轉義星星(在大多數實現中)。
然而,它會匹配一個字符串文字開始處的單個星形,'***,比如這個**' –
在這裏測試一下:http://regex101.com/r/vV8jT5 – brianmearns
「結束之星不工作(可能不應該)...開始明星作品(可能應該)「...掃管笏? –
您可以使用此模式:
\*\*((?:[^*]|[^*]\*[^*])*)\*\*
它將匹配任何對*
字符,後跟零個或多個其他比*
或任何字符*
比*
其他字符包圍,緊接着又一對*
個字符。
如果字符串文字以星號開頭,則***不匹配,***如此。** – brianmearns
@ sh1ftst0rm爲true,但未將其指定爲要求。完全有可能OP希望'*** test **'僅僅匹配'test'而不是'* test'。 –
你說得對,沒有明確提及。但假設從左到右解析,第一次出現'**'標記字符串和所有後續內容的開始,直到下一次出現'**'是字符串的一部分。像在C中一樣,''評論'被視爲'
我真的很喜歡用方括號代替轉義。這絕對讓我的眼睛更容易解析。 – brianmearns
如果你不想使用不情願的量詞您可以使用此:
\*\*((?:[^*]|[*](?=[^*]))+)\*\*
說明:這將匹配以外的任何字符「*」或'*'之間沒有一個'*'之後的'**'
這是什麼語言?正則表達式在不同的語言之間不同。 –