虽然这里有几个正则表达式示例显示了许多变化,但是我只想在Perl中使用正则表达式来搜索2个不同的字符串,其中一个字符串作为下划线(_),另一个字符串作为正斜杠(/)并替换每个带有连字符(-)的字符串。我正在使用定界符反斜杠,但这是不正确的输出。
Input: Output:
_APPLE -APPLE
/APPLE -APPLE
这是我的代码:
$string1 =~ s/\_\/APPLE/-APPLE
$string2 =~ s/\/\/APPLE/-APPLE
答案 0 :(得分:2)
该代码有一个额外的(转义的)/
,并将与带有_/
(在第二种情况下为//
)的字符串匹配。那不在您的数据中,该数据既有_
又有/
,但两者都不是。
此外,也不需要转义_
,如果它不是定界符,也不需要转义/
。
要匹配这两个字符中的任何一个,最干净,最有效的方法是 character class
$string =~ s{[_/](\w+)}{-$1};
替代在这里也可以使用
$string =~ s{(?:_|/)(\w+)}{-$1};
但是当匹配的可能性有更多字符(word|another
)时更适合。
鉴于问题中指定的内容很少,这里有很多假设。对于\w
来说,它也将数字和_
与字母匹配。如果您明确要求,我将根据需要进行编辑。
我假设代码编译所需的缺少结束定界符是张贴时的错字。