求助:删除子字符串问题

求助:删除子字符串问题

要删除一个字符串中的子串
用s///实现

但现在有个问题是:
因为子串是个变量, 不可预知内容
如$str =~ s/$delstr//;

如果$delstr含有一些特殊字符,如'('、'['之类的话
程序会出问题

请问有什么办法解决
先谢了

最近人变笨了,诶。。。。



QUOTE:
原帖由 iceberg77 于 2008-3-12 17:33 发表
要删除一个字符串中的子串
用s///实现

但现在有个问题是:
因为子串是个变量, 不可预知内容
如$str =s/$delstr//;

如果$delstr含有一些特殊字符,如'('、'['之类的话
程序会出问题

请问有什么办法解 ...



[Copy to clipboard] [ - ]
CODE:
our $delstr = qr /(?:\(|\[)/;
$str =~ s/$delstr//;



QUOTE:
原帖由 iceberg77 于 2008-3-12 17:33 发表
要删除一个字符串中的子串
用s///实现

但现在有个问题是:
因为子串是个变量, 不可预知内容
如$str =~ s/$delstr//;

如果$delstr含有一些特殊字符,如'('、'['之类的话
程序会出问题

请问有什么办法 ...

try

[Copy to clipboard] [ - ]
CODE:
$str =~ s/\Q$delstr\E//;

\Q\E之间的内容会给你进行变量替换,同时还会把特殊字符给你转义
#3,您正则用的也太熟了吧!
又学了一招!


QUOTE:
原帖由 mouse.rice 于 2008-3-12 18:31 发表
#3,您正则用的也太熟了吧!
又学了一招!

小骆驼书.P128,小注角12,

在此状况下,你可以使用eval块来捕捉这个错误.你也可以用quotemeta或它的等效形式\Q为所内插的文字加上引号,这样一来,它就不会被当成正则表达式了.

这本书,建意至少看三遍.会有更多收获.
谢谢

QUOTE:
原帖由 fouter 于 2008-3-12 17:37 发表


our $delstr = qr /(?:\(|\[)/;
$str =~ s/$delstr//;

这个我试了下, 会把元字符去掉, 但其它字符会保留(一直闹不清楚 q*// 的作用)

QUOTE:
原帖由 churchmice 于 2008-3-12 18:01 发表

try

$str =~ s/\Q$delstr\E//;

\Q\E之间的内容会给你进行变量替换,同时还会把特殊字符给你转义

这个可以,而且程序跑起来似乎还会更快
得好好看骆驼书了^_^