2011-06-26 47 views
1

我有一個小問題,我實在無法理解:猛砸正則表達式的疑難雜症

bash -c 'if [[ "hello" =~ ^[a-zA-Z0-9]\{1,\}\\.$ ]] ; then echo "OK" ; else echo "KO" ; fi

我想這應該給我KO,這讓我好...... 我想與匹配的東西至少1個字符,並以點結束...

我終於發現,它與bash的版本4.1.5,而不是與版本3.2.25

我應該如何使用這個版本進行?

編輯:

我發現一個可行的解決辦法,但我不知道爲什麼我不得不把括號中的轉義點:

bash -c 'if [[ "hello" =~ ^[a-zA-Z0-9]{1,}[\.]$ ]] ; then echo "OK" ; else echo "KO" ; fi' 

回答

1

.是在正則表達式的特殊(「比賽任何字符「)。將其轉義爲\.

3

您沒有轉義點,所以它被用作通配符並匹配任何字符。將.替換爲\.而且,使用+代替{1,},因爲它們是等效的。

+0

感謝您的回答,實際上我確實逃過了這一點,但它沒有顯示在這裏(現在用雙反斜槓糾正......)另外,bash regexp不接受+作爲修飾符... –

+0

@ Lapin-Blanc現在的工作方式:http://i54.tinypic.com/2l9s561.png(使用問題的複製粘貼) –

+0

我猜你嘗試過更新版本的bash,我在Centos 5.6和... http://i53.tinypic.com/21jd2ew.png :-) –