我很難理解regex
的基本規則,希望有人能夠用「簡單英語」來解釋它們。Perl中關於正則表達式的基本規則的困惑
$_ = '1: A silly sentence (495,a) *BUT* one which will be useful. (3)';
print "Enter a regular expression: ";
my $pattern = <STDIN>;
chomp($pattern);
if (/$pattern/) {
print "The text matches the pattern '$pattern'.\n";
print "\$1 is '$1'\n" if defined $1;
print "\$2 is '$2'\n" if defined $2;
print "\$3 is '$3'\n" if defined $3;
print "\$4 is '$4'\n" if defined $4;
print "\$5 is '$5'\n" if defined $5;
}
三個測試輸出
Enter a regular expression: ([a-z]+)
The text matches the pattern '([a-z]+)'
$1 is 'silly'
Enter a regular expression: (\w+)
The text matches the pattern '(\w+)'
$1 is '1'
Enter a regular expression: ([a-z]+)(.*)([a-z]+)
The text matches the pattern '([a-z]+)(.*)([a-z]+)'
$1 is 'silly'
$2 is " sentence (495,a) *BUT* one which will be usefu'
$3 is 'l'
我的困惑是如下
不
([a-z]+)
意味着 「一個小寫字母和一個/更多個重複」?如果是這樣,不應該「拾起」以及?除非它與()關於內存有關(即「愚蠢」是5個字母的單詞,所以「will」將不會被拾取,但「willx」將會?)不是
(\w+)
意思是「任何單詞和一個/多個重複」?如果是這樣,爲什麼數字「1」拿起,因爲沒有重複,但冒號「:」事後?確實
([a-z]+)(.*)([a-z]+)
表示「任何小寫字母和重複」,緊接着是「任何和0或更多的重複」,緊接着是「任何小寫字母和重複」?如果是這樣,爲什麼輸出看起來像上面顯示的那樣?
我試着儘可能在網上查找,但仍然無法理解它們。任何幫助將不勝感激。謝謝。
我沒有想到ascii以外的任何東西,但我已編輯以反映 – Cfreak 2013-03-24 22:58:18