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