带下划线和正斜杠的Perl RegEX

时间:2018-09-04 03:16:40

标签: regex perl

虽然这里有几个正则表达式示例显示了许多变化,但是我只想在Perl中使用正则表达式来搜索2个不同的字符串,其中一个字符串作为下划线(_),另一个字符串作为正斜杠(/)并替换每个带有连字符(-)的字符串。我正在使用定界符反斜杠,但这是不正确的输出。

 Input:          Output:
 _APPLE          -APPLE
 /APPLE          -APPLE

这是我的代码:

          $string1 =~ s/\_\/APPLE/-APPLE
          $string2 =~ s/\/\/APPLE/-APPLE

1 个答案:

答案 0 :(得分:2)

该代码有一个额外的(转义的)/,并将与带有_/(在第二种情况下为//)的字符串匹配。那不在您的数据中,该数据既有_又有/,但两者都不是。

此外,也不需要转义_,如果它不是定界符,也不需要转义/

要匹配这两个字符中的任何一个,最干净,最有效的方法是 character class

$string =~ s{[_/](\w+)}{-$1};

替代在这里也可以使用

$string =~ s{(?:_|/)(\w+)}{-$1};

但是当匹配的可能性有更多字符(word|another)时更适合。

鉴于问题中指定的内容很少,这里有很多假设。对于\w来说,它也将数字和_与字母匹配。如果您明确要求,我将根据需要进行编辑。

我假设代码编译所需的缺少结束定界符是张贴时的错字。