作者l10nel (小失)
看板RegExp
标题Re: [问题] 请问例外的写法
时间Wed Aug 1 17:11:33 2012
※ 引述《rkcity (喵。罐头)》之铭言:
: 借题询问一下各位前辈..
: http://regexr.com?31mr3
: - - - - - - - -
: Context
: - - - - - - - -
: -size 512
: -size 556
: -size 512556
: -size 556556
: -size 768
: -size 512768
: -size 556768
: - - - - - - - -
: - - - - - - - -
: RegExp
: - - - - - - - -
: -size (?!512|556)
: - - - - - - - -
: 这样子可以抓出 768 前的 -size
: 可是如果我想要抓的是 不是512和556
: 也就是会包含512556 556556 512768 556768等虽是512 556开头
: 但整体数字不是512和556的话
: 应该要怎麽改呢?
: 另外,如果我想要顺便抓出後面这个数值的话
: (?!512|556)因为是不包含其结果 所以没办法用$1取得 >"<
: 感谢各位前辈 m(_ _)m
use strict;
my @a = ("-size 512", "-size 556", "-size 512556", "-size 556556", "-size
512768", "-size 556768", "-size 333555");
for my $i (@a) {
if ($i =~ m/-size (?!(?:512|556)$)(?:512|556)(.+)$/) {
print "Matched: " . $1 . "\n";
}
}
结果:
Matched: 556
Matched: 556
Matched: 768
Matched: 768
说明:找出 512 或 556 後面的数字,但如果数字仅是 512 或 556,或不以 512 或
556 开头,则略过。
这是你要的吗?如果不是,可设法自行修改。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 76.198.133.1
1F:推 rkcity:谢谢L大, 我想要的是只要数值不是512或556就印出来 08/01 17:24
2F:→ rkcity:也就是说 即使像是512768 556334也必须印出 08/01 17:25
3F:→ rkcity:可是我怎麽改都会变成 前面只要是512或556 就印不出来 Q_Q 08/01 17:26
4F:→ l10nel:那更简单,去掉 (?:512|556) 就成了 08/01 17:26
5F:→ l10nel:秘诀在那个$符号,不能省,否则前面只要512或556就失败 08/01 17:28
6F:推 blackkaku:-size (?!(512|556)$) 08/01 18:49
7F:推 rkcity:-size (?!(?:512|556)$)(.+)$ 这样不行耶.. 08/01 19:35
9F:→ rkcity:-size (?!(512|556)$) 这样的话 都会match 08/01 19:36
11F:推 rkcity:阿!! 我试出来了!! 08/01 19:43
12F:→ rkcity:-size (?!(?:512|556)\b)(.+) 08/01 19:43
13F:→ rkcity:可以用$1提取後面数字的部份 并且他不是512或556 08/01 19:43
14F:→ rkcity:虽然有点晕头转向的 但还是要感谢前辈指点! 08/01 19:44
15F:→ rkcity:後面放\b跟放$ 结果却截然不同@@" 08/01 19:45
16F:→ blackkaku:真奇怪 我的环境下是ok的耶 08/01 19:48
17F:推 rkcity:咦.. 我是用上面那个线上检测RegExp工具 所以....||| 08/01 19:49
18F:→ blackkaku:试了一下 要勾multiline才行。 08/01 20:09
19F:推 rkcity:原来如此 ._.!! 谢谢^^ 08/01 20:15
20F:推 godspeedlee:$是指string end,\b是单字分隔,当然结果不一样 08/01 22:47