如何替换字符串的中间?

Tre*_*ree -4 regex perl

$a = "<no> 3232 </no> "

$a =~ s/<no>(.*)</no>/000/gi ;
Run Code Online (Sandbox Code Playgroud)

我期待那$a变成了"<no> 000 </no> ",但它不起作用.

dax*_*xim 10

你需要环顾四周的断言.

$a =~ s|(?<=<no> ).*(?= </no>)|000|gi;
# $a is now "<no> 000 </no> "
Run Code Online (Sandbox Code Playgroud)

你考虑过读一两本Perl书吗?如果你必须通过阅读精美的文档来提出可以轻松回答的那类问题,那么你就无法有效地学习.


Can*_*ice 5

您可以放弃花哨的前瞻或外观断言,并提出一个稍长的正则表达式:

$str =~ s|<no>.*?</no>|<no>000</no>|gi;
Run Code Online (Sandbox Code Playgroud)

这可能是更容易一些阅读,但它是在你更换小幅反直觉<no>whatever</no><no>000</no>,即你不只是更换的东西<no></no>,你要更换整个字符串与恰好到另一个字符串拥有<no>并且</no>在其中.