我需要一個最佳正則表達式來匹配文本文件中的所有這三種類型的文本。單一正則表達式不適用於三種不同的模式
- [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 2013-03-01 15:09:07
/
(?(DEFINE)
(?<WORD> [a-zA-Z]+)
(?<NUM> [0-9]+)
)
\[ \s*
(?: (?&WORD) (?: \s* , \s* (?&WORD))+
| (?&NUM) (?: \s* , \s* (?&NUM))+
| (?&NUM) \s* - \s* (?&NUM)
)
\s* \]
/x
一個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 2013-03-01 12:29:03
TRUE中的T,R和U與您的正則表達式不匹配 – orique 2013-03-01 12:29:25