1桁以外のすべての正規表現は一致しますか一致しませんか?1桁以外のすべてに一致する正規表現
stack
がstack overflow
が一致しなければならないと一致する必要があり、例えば、
12389237
は一致しかしべき2
べきない一致
私は^[^\d]+$
ですが、明らかにそれは私の3番目の条件と一致しません。
EDIT:
はこれが道でPHPのためです。
1桁以外のすべての正規表現は一致しますか一致しませんか?1桁以外のすべてに一致する正規表現
stack
がstack overflow
が一致しなければならないと一致する必要があり、例えば 、
12389237
は一致しかしべき2
べきない一致私は^[^\d]+$
ですが、明らかにそれは私の3番目の条件と一致しません。
EDIT:
はこれが道でPHPのためです。
それは彼が言わなければならないことにはうまくいかないでしょう。さらに、大括弧で囲まれた唯一の '\ D'を囲む理由はありません。 – tchrist
@tchristあなたが正しいです、私は私の答えを変更しました。 – PenguinCoder
あなたの '/ g'や'/m'が意味をなさないかどうかわかりません。あなたは何を考えているのですか? – tchrist
最も簡単には、通常のプログラムロジックを使用して、孤立桁の一致を否定するだけである。
! /(?<!\d)\d(?!\d)/
ことも可能で、単一のパターンでエンコーディングが、迷惑:/x
経由
/^(?!.*(?<!\d)\d(?!\d))/
または広がっ:
/^(?! .* (?<! \d) \d (?! \d))/x
や各種複数行の状況に対して絶縁さ:私は定期的に正の一致を否定することが容易であることを特徴とする理由
/\A (?! .* (?<! \d) \d (?! \d))/sx
を参照してください?
ここでのテストプログラムです:
use v5.12;
while (<DATA>) {
my $got =/^ (?! .* (?<! \d) \d (?! \d))/x;
print $got ? "PASS" : "FAIL";
print ": ", $_;
}
__END__
"stack" should match
"stack overflow" should match
"12389237" should match but
"2" should not match
生成:
PASS: "stack" should match
PASS: "stack overflow" should match
PASS: "12389237" should match but
FAIL: "2" should not match
をあなたがあなたの質問をmisformatted場合、あなたは単に文字列であることを意味している場合は、実際に
stack
stack overflow
12389237
2
代わりに、その後、行う簡単な事は一桁戦を否定することはまだです:慎重
! /^\d$/
以上、
! /\A\d\z/
パターンにɴᴏᴛ操作を構築しています決して美しくない。
/^ (?! \d $)/x
ここで別のテストプログラムです:
use v5.12;
while (<DATA>) {
my $got = /^ (?! \d $)/x;
print $got ? "PASS" : "FAIL";
print ": $_";
}
__END__
stack
stack overflow
12389237
2
報告:
PASS: stack
PASS: stack overflow
PASS: 12389237
FAIL: 2
while(my $line = <DATA>){
chomp $line;
if ($line !~ /^\d{1}$/) {
print "$line match\n";
}
else {
print "$line NOT match\n";
}
}
__DATA__
stack
stack overflow
12389237
2
結果:
perl regex.pl
stack match
stack overflow match
12389237 match
2 NOT match
'{1}'は明示的であることを除いてすべての点で重複しています。 – TLP
これは1桁でもないので空文字列にも一致するはずですか? – Kaivosukeltaja
これがPHPの場合、なぜperlタグを持っていますか? – TLP
@Kaivosukeltajaうん、1桁以外は何でも。乾杯。 –