클래스 빼기가 지원되지 않으면, 빼기를 얻기 위해 네거티브 클래스를 사용할 수 있어야합니다.
몇 가지 예는, [^\D] = \d
있습니다 [^[:^alpha:]] = [a-zA-Z]
귀하의 문제가 [^a-z[:^alpha:]CIKMOV]
[^
a-z # not a-z
[:^alpha:] # not not A-Za-z
CIKMOV # not C,I,K,M,O,V
같은 문자 클래스 내부에 부정적인 POSIX 문자 클래스를 사용하여, 그런 식으로 해결 될 수있다 ]
편집 -이 역시 작동하고 쉽게 읽을 수 있습니다 : [^[:^alpha:][:lower:]CIKMOV]
[^
[:^alpha:] # A-Za-z
[:lower:] # not a-z
CIKMOV # not C,I,K,M,O,V
]
결과없이 AZ하는 문자 클래스 C, I, K, M, O, V
기본적으로 빼기.
'AB DEFGH J L N PQRSTU WXYZ'
'AB DEFGH J L N PQRSTU WXYZ'
:
use strict;
use warnings;
my $match = '';
# ANYOF[^\[email protected][-\377!utf8::IsAlpha]
for (0 .. 255) {
if (chr($_) =~ /^[^a-z[:^alpha:]CIKMOV]$/) {
$match .= chr($_); next;
}
$match .= ' ';
}
$match =~ s/^ +//;
$match =~ s/ +$//;
print "'$match'\n";
$match = '';
# ANYOF[^\[email protected][-\377+utf8::IsDigit !utf8::IsWord]
for (0 .. 255) {
if (chr($_) =~ /^[^a-z\d\W_CIKMOV]$/) {
$match .= chr($_); next;
}
$match .= ' ';
}
$match =~ s/^ +//;
$match =~ s/ +$//;
print "'$match'\n";
출력 테스트 ASCII 문자 0-255 AZ 마이너스 CIKMOV의 중단을 나타낸다 : 여기
은 (펄) 2 명 개의 다른 수준의 혼성의 테스트입니다
출처
2011-01-24 20:03:36
sln
+1 깨끗한 접근 방식. – codaddict
나는 이것이 "깨끗한"방법을 실제로 얻지 못합니다. 이것은 더 시원한 솔루션이지만 의심의 여지가 없지만 다른 솔루션보다 훨씬 더 비밀스런 방법입니다. – fresskoma
이것은 순수한 문자 클래스 솔루션이 아니며 모호합니다. {2}을 1 년 후 {3}으로 변경 한 다음 디버그 해보십시오. – sln