Ron*_*Ron 19 regex string perl character
我有动态生成的字符串@#@!efq@!#!,我想使用Perl从字符串中删除特定字符.
目前我正在做这件事(用什么都替换字符):
$varTemp =~ s/['\$','\#','\@','\~','\!','\&','\*','\(','\)','\[','\]','\;','\.','\,','\:','\?','\^',' ', '\`','\\','\/']//g;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?我正在寻找干净的东西.
Tim*_*ker 24
您误解了字符类的使用方式:
$varTemp =~ s/[\$#@~!&*()\[\];.,:?^ `\\\/]+//g;
Run Code Online (Sandbox Code Playgroud)
与正则表达式相同(假设您不是要删除'字符串中的字符).
编辑:+允许一些"特殊字符"一次匹配,所以它也应该更快.
Shi*_*zou 18
您可以使用tr代替:
$p =~ tr/fo//d;
Run Code Online (Sandbox Code Playgroud)
将删除每个f和每个o $p.在你的情况下,它应该是:
$p =~ tr/\$#@~!&*()[];.,:?^ `\\\///d
Run Code Online (Sandbox Code Playgroud)
对于这个大字符类,更容易说出你想要保留的内容.角色类的第一个位置的插入符反转了它的意义,所以你可以写
$varTemp =~ s/[^"%'+\-0-9<=>a-z_{|}]+//gi
Run Code Online (Sandbox Code Playgroud)
或者,使用效率更高 tr
$varTemp =~ tr/"%'+\-0-9<=>A-Z_a-z{|}//cd
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111617 次 |
| 最近记录: |