具有下划线和正向斜线的Perl RegEX

问题描述 投票:-1回答:1

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

 Input:          Output:
 _APPLE          -APPLE
 /APPLE          -APPLE

这是我的代码:

          $string1 =~ s/\_\/APPLE/-APPLE
          $string2 =~ s/\/\/APPLE/-APPLE
regex perl
1个回答
2
投票

该代码有一个额外的(转义)/,并将匹配字符串与_/(和第二种情况下的//)。这不是你的数据,它有_/,而不是两者。

此外,没有必要逃脱_,并没有/,如果它不是分隔符。

要匹配几个字符中的任何一个,最干净,最有效的是字符类

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

交替也适用于此

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

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

这里有很多假设,考虑到问题中的指定很少。例如,\w也匹配数字和_以及字母。如果您澄清了我将根据需要编辑的要求。

我假设代码编译所需的缺少的结束分隔符是发布中的拼写错误。

© www.soinside.com 2019 - 2024. All rights reserved.