我有一个下面的正则表达式,如果找到邮政信箱办公室组合
,则返回true\b[P|p]*(OST|ost)*\.*\s*[O|o|0]*(ffice|FFICE)*\.*\s*[B|b][O|o|0][X|x]\b
如果特定的字符串有po box office的组合,那么我想要与此完全相反,那么它应该返回false,否则允许每一件事
有人可以帮我这个吗
答案 0 :(得分:7)
伪代码:
if not regex.matches(string)
...
end if
没有简单的方法可以使正则表达式匹配“除了复杂的表达式之外的所有东西”。
匹配表达式并否定结果。
此外,您的正则表达式方式变得复杂。尝试
\bp(ost)?[.\s-]*o(ffice)?[.\s-]+box\b
设置了单行模式和ignore-case标志。我认为确实不需要匹配0
代替o
,但这取决于您。如果必须,请使用[o0]
。
答案 1 :(得分:7)
// leon's p.o. box detection regex
// for better results, trim and compress whitespace first
var pobox_re = /^box[^a-z]|(p[-. ]?o.?[- ]?|post office )b(.|ox)/i,
arr = [
"po box",
"p.o.b.",
"p.o. box",
"po-box",
"p.o.-box",
"PO-Box",
"p.o box",
"pobox",
"p-o-box",
"p-o box",
"post office box",
"P.O. Box",
"PO Box",
"PO box",
"box 122",
"Box122",
"Box-122",
];
for (var i in arr)
console.log(pobox_re.test(arr[i]));
答案 2 :(得分:2)
非常感谢您的帮助,但我找到了解决方案
(?i:^(?!([\s|\0-9a-zA-Z. ,:/$&#'-]*|p[\s|\.|, ]*|post[\s|\.]*)(o[\s|\.|, ]*|office[\s|\. ]*)(box[\s|\. ]*))[0-9a-zA-Z. ,:/$&#'-]*$)
答案 3 :(得分:0)
在剥离字符类中的|并删除一些不适当的转义后,我在Perl中尝试了你的正则表达式。似乎没问题,虽然有点消极(?!)。
use strict;
use warnings;
my $regex = qr/
(?i:
^
(?!
( [\s0-9a-zA-Z. ,:\$&#'-]*
| p[\s., ]*
| post[\s.]*
)
( o[\s., ]*
| office[\s. ]*
)
(
box[\s. ]*
)
)
[0-9a-zA-Z. ,:\$&#'-]*
$
) /x;
my @tests = (
'this is a Post office box 25050 ',
'PO Box 25050 ',
'Post Box 25050 ',
);
for my $sample (@tests) {
if ($sample =~ /$regex/) {
print "Passed - $sample\n";
}
}
__END__
Passed - Post Box 25050