快速笔记:我知道降价解析器并不关心这个问题。这是为了在md文件中保持视觉一致性以及进行实验。
示例:
# this
##that
###or this other
目标:阅读每一行,如果降价标头在井号/井号后没有空格,则添加一行,使其看起来像:
# this
## that
### or this other
我的非正则表达式尝试:
function inelegantFunction (string $string){
$array = explode('#',$string);
$num = count($array);
$text = end($array);
return str_repeat('#', $num-1)." ".$text;
}
echo inelegantFunction("###or this other");
// returns ### or this other
这可行,但是它没有机制来匹配不太可能的七个'#'情况。
无论功效如何,我都想弄清楚如何使用php中的regex做到这一点(可能的话还可以使用javascript)。
答案 0 :(得分:2)
尝试匹配(?m)^#++\K\S
,以匹配以一个或多个数字符号开头的行,然后在函数中将其替换为 $0
:
return preg_replace('~(?m)^#++\K\S~', ' $0', $string);
要将#
的数量限制为六个,请使用:
(?m)^(?!#{7})#++\K\S
答案 1 :(得分:1)
我猜测带有正确字符列表边界的简单表达式可能在这里起作用,也许是:
(#)([a-z])
如果我们可能有更多的字符,我们可以简单地将其添加到[a-z]
中。
$re = '/(#)([a-z])/m';
$str = '#this
##that
###that
### or this other';
$subst = '$1 $2';
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;