Regex 带下划线和正斜杠的Perl正则表达式

Regex 带下划线和正斜杠的Perl正则表达式,regex,perl,Regex,Perl,虽然这里有几个正则表达式示例显示了许多变体,但我只想在Perl中使用正则表达式搜索两个不同的字符串,其中一个字符串作为下划线(ux),另一个字符串作为正斜杠(/),并用连字符(-)加字符串替换每个字符串。我使用的是分隔符反斜杠,但输出不正确 Input: Output: _APPLE -APPLE /APPLE -APPLE 这是我的密码: $string1 =~ s/\_\/APPLE/-APPLE

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

 Input:          Output:
 _APPLE          -APPLE
 /APPLE          -APPLE
这是我的密码:

          $string1 =~ s/\_\/APPLE/-APPLE
          $string2 =~ s/\/\/APPLE/-APPLE
代码有一个额外的(转义的)
/
,并将字符串与
\/
(在第二种情况下为
/
)匹配。这不在您的数据中,您的数据既有
\uuu
也有
/
,而不是两者都有

此外,如果
/
不是分隔符,则不需要转义它,也不需要转义
/

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

这种交替在这里也起作用

$string =~ s{(?:_|/)(\w+)}{-$1};
但当匹配的可能性有更多字符时(另一个字符)

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


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

什么单词包含下划线但不包含正斜杠?你说你的分隔符是反斜杠是什么意思?你能在输入中显示它吗?我的字符串有一个下划线和一个正斜杠。如果有下划线或正斜杠,则用连字符匹配。最好用字符类替换非捕获组。此外,我们还应该注意,当前的正则表达式也与苹果的
/\u相匹配,这可能是不可取的。如果前一条路径不匹配,引擎选择一条路径进行接近,然后选择另一条。因此,引擎可以根据输入字符串执行额外的步骤。虽然这是一个额外的步骤,但它的成本,因为它不仅仅是一个额外的步骤。引擎可能会走得更远,然后需要回程。所以我们不确定引擎应该采取多少步骤才能找到成功的匹配。话虽如此,最好的做法是在我们做类似于
(X | Y | | | | | | | | | | | | | | | | | | |。所以我们可以说它更好更好。引擎实现角色类的方式不同。这就像在字符列表中查找
x
[a,b,c..]
。速度很快,失败/比赛发生得更早。另一方面,组不能被视为字符列表,因为它们应该包含大型表达式。这意味着引擎应该沿着每一条路径运行,直到失败或成功,这需要更多的时间。@revo好的,谢谢;我不知道它们是如何实现的。编辑
$string =~ s{(?:_|/)(\w+)}{-$1};