作者qrtt1 (愚人)
看板perl
标题Re: [问题] 关於regular expression
时间Sun Oct 7 20:02:24 2007
※ 引述《willhunting (这些年来)》之铭言:
: Hi!各位先进,我是perl的新手,现在在处理字串上遇到了一点麻烦想来
: 这里跟各位讨教。是这样的,我目前要对使用者输入的搜寻字串作一些
: 判别,规则是这样的:
: 1. cat : 使用者要找cat这个字
: 2. "cat dog" : 使用者要找cat dog,一定要连在一起
: 3. !pig : 使用者要找不含pig的
: 4. !"pig duck" : 使用者要找不含连在一起的"pig duck"
: 因为上述所有组合可能在一个command里面包含,所以我要个别进行判别
: 再作处理,所以我对四种状况的判读是这样写的
: 1. /^[^!]\S+/
: 2. /^"(\S+\s*)+"$/
: 3. /^![^"]\S+/
: 4. /^!"(\S+\s*)+"/ <= 出问题了
: 1-3都没有问题,但第4个,也就是处理!"pig duck"这样子的情况时,如果中间
: 有空格,perl会以规则1去抓出duck"来,但如果中间不放空格,也就是如果把
: 输入改成!"pigduck"的话就没问题,请问该用什麽样的regex来写比较好呢?
: 谢谢!!
应该不需要那麽多规则啊 @"@
@exclude = ();
@include = ();
@regex = ('(!?)"([^"]*?)"', '(!?)(\w+)');
$_ = $search_key;
while(1){
$ex = 0;
foreach $regex (@regex){
$ex |= s/$regex//;
if($1 eq '!') { push(@exclude, $2);}
else { push(@include, $2);}
}
last if($ex == 0);
}
==========================================
就只是有 ! 的表示不要的
和有"的表示一个完整的词而已。
regex 所以只有二组规则噜。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.49.182