텍스트 파일에서이 세 가지 유형의 텍스트를 모두 일치시키는 최적의 정규 표현식이 필요합니다.세 가지 다른 패턴에 대해 단일 정규식이 작동하지 않습니다.
- [TRUE, FALSE]
- [4,5,6,7]
- [2-15] 내가 를 작동하지 않는 경우 다음과 같은 정규식 일치를 시도하고
m/([0-9A-Fa-fx,]+)\s*[-~,]\s*([0-9A-Fa-fx,]+)/)
텍스트 파일에서이 세 가지 유형의 텍스트를 모두 일치시키는 최적의 정규 표현식이 필요합니다.세 가지 다른 패턴에 대해 단일 정규식이 작동하지 않습니다.
m/([0-9A-Fa-fx,]+)\s*[-~,]\s*([0-9A-Fa-fx,]+)/)
4-7
은 2-15
의 하위 집합입니다. 이 정규식을 캡처해야합니다
/TRUE|FALSE|[2-9]|1[0-5]/
이것이 [4,5,6,7]과 어떻게 일치 할 수 있는지 알 수 없습니다. 제 말은 일치하지만 첫 번째 십진수 만 나타냅니다. 나는 당신이 (불완전한) 문제 설명으로 너무 많이 해석하고 있다고 생각한다. – memowe
quick'n'dirty 테스트 프로그램 :
이#!/usr/bin/env perl
use strict;
use warnings;
for my $line (<DATA>) {
chomp $line;
print "$line: ";
if ($line =~/
^ # beginning of the string
\[ # a literal opening sq. bracket
( # alternatives:
(TRUE|FALSE) (,(TRUE|FALSE))* # one or more thruth words
| (\d+) (,\d+)* # one or more numbers
| (\d+) - (\d+) # a range of numbers
) # end of alternatives
\] # a literal closing sq. bracket
$ # end of the string
/x) {
print "match\n";
}
else {
print "no match\n";
}
}
__DATA__
[TRUE]
foo
[FALSE,TRUE,FALSE]
[FALSE,TRUE,]
[42,FALSE]
[17,42,666]
bar
[17-42]
[17,42-666]
출력 :
[TRUE]: match
foo: no match
[FALSE,TRUE,FALSE]: match
[FALSE,TRUE,]: no match
[42,FALSE]: no match
[17,42,666]: match
bar: no match
[17-42]: match
[17,42-666]: no match
당신이 무엇을 의미합니까'working'하지? – Toto
TRUE의 T, R 및 U가 정규 표현식과 일치하지 않습니다 – orique