모범 사례에 대한 조언을 찾고 있습니다. 비어 있거나 공백 문자 만 포함하는 문자열을 확인하는 가장 좋은 방법은 무엇입니까?Perl에서 빈 문자열 확인
일반적으로이 $string =~/^\s*$/
과 같은 정규식을 사용하여 변수가 비어 있는지 확인하십시오. 좀 더 받아 들일 수있는 방법이 있습니까? 아니면 다른 것과 마찬가지로 좋습니다. regex를 사용하거나 chomp하고 빈 문자열을 확인하는 것이 더 낫습니까?
감사합니다.
모범 사례에 대한 조언을 찾고 있습니다. 비어 있거나 공백 문자 만 포함하는 문자열을 확인하는 가장 좋은 방법은 무엇입니까?Perl에서 빈 문자열 확인
일반적으로이 $string =~/^\s*$/
과 같은 정규식을 사용하여 변수가 비어 있는지 확인하십시오. 좀 더 받아 들일 수있는 방법이 있습니까? 아니면 다른 것과 마찬가지로 좋습니다. regex를 사용하거나 chomp하고 빈 문자열을 확인하는 것이 더 낫습니까?
감사합니다.
개인적으로, 나는 일반적으로 감각을 뒤집어서 하나의 공백이 아닌 문자를 검색합니다.
next unless $string =~ /\S/;
이케가 언급 한 바와 같이, \s
(및 \S
가) 정확히 자하는 것은 고려 공백에 대해 조금 특이한 될 수 있으며, \p{Whitespace}
를 사용 (또는 내 경우 \P{Whitespace}
)에 대한 수 : 그래서 내가 좋아하는 뭔가 말할 것 보다 일관된 결과.
호기심에서 벗어나 not /\S/
대 /^\s*\z/
을 벤치마킹했습니다. 80 자 문자열 (Perl 5.14.2 포함)에서 not /\S/
은 공백 문자열의 경우 약 20 % 빨랐으며 공백이 아닌 문자열의 경우 /^\s*\z/
은 약 30 % 빨랐습니다. 빈 라인을 검사하는 것이 프로그램의 병목 현상은 아니지만보다 단순한 정규 표현식을 사용하는 것이 좋습니다.
use Benchmark 'cmpthese';
our $text = ' ' x 80;
#our $text = 'abcd' x 20;
cmpthese(-3, {
'pos' => '$text =~ /^\s*\z/',
'neg' => 'not $text =~ /\S/',
'negU' => 'not $text =~ /\P{Whitespace}/',
});
예는 공간에 대한 검색 결과가 아닌 공간에 대한
Rate pos negU neg
pos 3562012/s -- -2% -15%
negU 3651619/s 3% -- -13%
neg 4194275/s 18% 15% --
예 결과 :
Rate negU neg pos
negU 4951234/s -- -3% -24%
neg 5112271/s 3% -- -22%
pos 6555251/s 32% 28% --
추가 마일 및 벤치마킹에 감사드립니다 :) – Hameed
완벽하게 괜찮습니다 (/^\s*\z/
은 덜 중복 됨).
참고 : 수직 탭 (U + 000B)과 일치하지 않습니다. 그것에 대해 \p{Whitespace}
을 사용할 수 있습니다.
참고 : 버그로 인해 use 5.012;
또는 /u
이 사용되지 않는 경우에만 No-Break Space (U + 00A0)가 일부 일치합니다. \p{Whitespace}
은 (는) 해당 버그가 적용되지 않습니다.
질문에 대답 해 주셔서 감사합니다. – Hameed
'chomp'와 동일한 결과를 얻을하지 않는 정규식 ... –
내가 무엇을보고 네 말 뜻은. 지적 해 주셔서 고마워요. – Hameed