在Perl中替换字符串或什么也不做

Kri*_*osh 0 regex perl

我想更换"metre""mt""m"用perl.这该怎么做?我在用这个:

$string=~ s/[Mm][Ee\s][Tt][Rr\s][Ee\s]/m/g;
Run Code Online (Sandbox Code Playgroud)

它正在努力"metre",但不是为了"mt"

Nig*_*oJr 5

i 修改器可以让你做一个不区分大小写的匹配.

$string =~ s/metre|mt/m/gi;
Run Code Online (Sandbox Code Playgroud)

要么

$string =~ s/m(?:etre|t)/m/gi;
Run Code Online (Sandbox Code Playgroud)

,这更有效率.

假设您正在尝试将"单词" metremt长度单位替换为m,则需要使用单词boundary meta character \b,如注释中指出的@ M42.这将阻止像mt中的匹配warmth.

  • @ M42:可能是尾随的`\ b`,但有可能会出现像'42mt`这样的字符串,这些字符串在前导字符串中找不到.也许是s /(?<![az])m(?:etre | t)\ b/m/gi` (3认同)