假设我有一个这样的字符串:
=====
我想用这个替换它:
-----
我只想更换它,如果它有超过一定数量的那个角色(我们会说> 3)。
所以,这些应该是替代品:
=== -> ===
==== -> ----
===== -> -----
该应用程序是我想用markdown替换markdown中的所有1级标题,而不更改嵌入的代码块。
我知道我可以这样做:
/=/-/g
,但这匹配任何等号(if (x == y)
),这是不可取的。
或这个:
/===+/----/g
,但这并不考虑原始匹配字符串的长度。
这可能吗?
Perl有可能:
my $string = "===== Hello World ====";
$string =~ s/(====+)/"-" x length($1)/eg;
# $string contains ----- Hello World ----
Flag / e使Perl在s ///的第二部分执行表达式。
您可以尝试使用oneliner:
perl -e '$ARGV[0] =~ s/(====+)/"-" x length($1)/eg; print $ARGV[0]' "===== Hello World ===="
取决于您使用的语言。基本上,在某些语言中,您可以将代码放在正则表达式的右侧,允许您执行以下操作:(这是在perl中):
s/(=+)/(length($1) > 3 ? "-" : "=") x length($1)/e
'e'标志告诉perl执行表达式右侧的代码,而不是仅仅将其解析为字符串。