regex - 특수문자 - Perl 문자열에서 특정 문자를 제거하는 더 나은 방법




정규표현식 특수문자 (3)

@#@[email protected]!#! 와 같은 문자열을 동적으로 생성했습니다 @#@[email protected]!#! , Perl을 사용하여 문자열에서 특정 문자를 제거하고 싶습니다.

현재 나는 이것을 (무언가로 문자를 대체)하고있다.

$varTemp =~ s/['\$','\#','\@','\~','\!','\&','\*','\(','\)','\[','\]','\;','\.','\,','\:','\?','\^',' ', '\`','\\','\/']//g;

이 작업을 수행하는 더 좋은 방법이 있습니까? 나는 깨끗한 것을 찾는다.


대신 tr을 사용할 수 있습니다.

       $p =~ tr/fo//d;

$p f에서 모든 f와 모든 o를 삭제합니다. 귀하의 경우 그것은해야합니다 :

       $p =~ tr/\$#@~!&*()[];.,:?^ `\\\///d

이 캐릭터 클래스를 사용하면 당신이 갖고 싶은 것을 말하기가 더 쉽습니다. 문자 클래스의 첫 번째 위치에있는 캐럿은 감각을 뒤집어 쓰므로

$varTemp =~ s/[^"%'+\-0-9<=>a-z_{|}]+//gi

또는 더 효율적인 tr 사용하면

$varTemp =~ tr/"%'+\-0-9<=>A-Z_a-z{|}//cd

캐릭터 클래스 가 어떻게 사용되는지 오해했습니다.

$varTemp =~ s/[\$#@~!&*()\[\];.,:?^ `\\\/]+//g;

정규 표현식과 동일합니다 (문자열에서 ' 문자 제거 ' 의미하지 않는다고 가정).

편집 : + 는 "특수 문자"중 몇 개를 한 번에 일치시킬 수 있으므로 더 빨라야합니다.





character