我正在尝试找出正则表达式以匹配所有出现的
*这种字符串*
。不幸的是,另外两个规则使得这件事情比我想象的更加复杂:
- 标记的字符串应该以
*
开头,后面跟着非空格字符(所以* this one*
不应该被匹配) - 标记的字符串应该以非空白字符结尾,后面跟着
*
然后是空格(所以*this one *
和*this o*ne
不应该被匹配)
\*\S([^\*]+)?\*
开始,对于我的测试字符串:
*foo 1 * 2 bar* foo *b* azz *qu **ux*
匹配如下位置:
[*foo 1 *] 2 bar* foo [*b*] azz [*qu *][*ux*]
这是我想要实现的:
[*foo 1 * 2 bar*] foo [*b*] azz [*qu **ux*]
所以出现了两个问题:
- 如何在正则表达式中表达第2条规则:“搜索直到出现第一个非空白字符,后面跟着
*
,然后是空格”?使用肯定的前瞻吗? - 如何匹配第2条规则中的空格,但不将其包含在结果中,
\*\S([^\*]+)?\*\s
会这样做吗?
*1**2*
和****1*
的输入字符串应该如何处理? - revo[*1**2*]
as2*
is the first closing one in the string following the rule of "non-whitespace followed by*
followed by whitespace". Same for second example:[****1*]
- Michal*****foo 1 * 2 bar*
的预期结果是什么?整个字符串还是*foo 1 * 2 bar*
? - Wiktor Stribiżew