使用正则表达式\*\*([^\*]*)\*\*
,我可以匹配 's 内的多组文本,**
例如:
this **is** a **test**
返回is
& test
。
给定字符串that's **right * a test**
,如何调整我的表达式以返回right * a test
?如何让我的表达排除两个*
而不是一个?
使用正则表达式\*\*([^\*]*)\*\*
,我可以匹配 's 内的多组文本,**
例如:
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!**
,它将在字符串内容中包含星号,我认为这也是有效的,因为第一次出现**
标志着字符串文字的开始,而下面的单个*
只是内容的一部分.
另外,请注意,您不需要在字符类中转义星号(在大多数实现中)。
如果你不想使用不情愿的量词,你可以使用这个:
\*\*((?:[^*]|[*](?=[^*]))+)\*\*
说明:这将匹配除 '*' 或 '*' 之外的任何字符,在这对 '**' 之间没有后跟 '*'
你可以使用这种模式:
\*\*((?:[^*]|[^*]\*[^*])*)\*\*
它将匹配任何一对*
字符,后跟零个或多个除 之外的任何字符*
或被除 之外*
的字符包围的字符*
,然后是另一对*
字符。