是否可以在 perl 中定义单词边界字符集

Har*_*nry 2 regex perl

我需要替换 perl 中的一些字符串,这些字符串以$字符开头并以). 因此,例如替换$(FOO)为FOO. 我不想匹配像$(FOO)_BLAHorBLAH_$(FOO)或 $(FOO)$(BAR) 这样的东西,但我确实想匹配$($(FOO)). 我不能\b在我的正则表达式中使用,因为 the$或 the)实际上不是单词字符。不过,我想做一些等效的事情。我想出了:

/([^\w\$\)_]|^)\$\(FOO\)([^\w\$\(_]|$)/$1FOO$2/
Run Code Online (Sandbox Code Playgroud)

这看起来很乱(特别是我不喜欢正则表达式中的$1and $2。我只是想知道是否有更干净的方法来做到这一点。

cho*_*oba 6

使用负环视使模式更短且更具可读性,并摆脱了捕获组:

s/(?<![\w$)])\$\(FOO\)(?![\w$(])/FOO/
Run Code Online (Sandbox Code Playgroud)