使用正则表达式\*\*([^\*]*)\*\*
,我可以匹配**
内的多组文字,例如:
this **is** a **test**
返回is
& test
。
给定字符串that's **right * a test**
,如何调整表达式以返回right * a test
?如何让我的表达式排除两个*
而不是一个?
答案 0 :(得分:8)
您可以使用不情愿的量词.*?
:
\*\*.*?\*\*
假设你的正则表达式引擎支持它。
答案 1 :(得分:1)
使用or
:
\*\*((?:[^*]|\*[^*])*)\*\*
在匹配组中,这将匹配任何不是星形的角色,或者跟随非星形的星形。假设双星(**
)的第一个出现信号表示字符串文字的结尾。如果字符串内容以星号结尾(如**my string ends with a star***
),则我的正则表达式不会包含匹配中的最终星号(因此字符串内容将只是“my string ends with a star
”)。但我认为这是有效的,如上所述。
但是如果字符串文字以类似***Star Power!**
的星号开头,它会在字符串内容中包含星号,我认为这也是有效的,因为**
的第一次出现标志着字符串文字,以下单个*
只是内容的一部分。
另外,请注意,您不需要在角色类中转义星号(在大多数实现中)。
答案 2 :(得分:1)
答案 3 :(得分:0)
您可以使用此模式:
\*\*((?:[^*]|[^*]\*[^*])*)\*\*
它将匹配任意一对*
个字符,后跟除*
以外的任何字符中的零个或多个,或*
以外的字符所包围的*
,另一对*
字符。
答案 4 :(得分:0)
如果您不想使用不情愿的量词,您可以使用:
\*\*((?:[^*]|[*](?=[^*]))+)\*\*
说明:这将匹配“*”或“*”以外的任何字符,但在“**”对之间没有后跟'*'