2011-05-01 87 views
19

我有這個爲什麼這個正則表達式測試不起作用?

echo $line 
Thisisaline. 

我想知道這是爲什麼不工作:

if [[ "$line" =~ "[a-zA-Z]+\.$" ]] ; then echo "hello"; fi 

上述正則表達式沒有給出輸出。

+0

您的正則表達式模式不允許使用空格嗎? – 2011-05-01 02:59:23

+0

它沒有,我修改了匹配字符串。 – abc 2011-05-01 03:00:22

回答

2

某些帶有bash的OS版本會爲您提供輸出。所以它取決於你得到你的更新。 然而,沒有正則表達式可以使用通配符擴展

shopt -s extglob 
case "$line" in 
+([a-zA-Z]).) echo "hello";; 
esac 

如果不行,用正則表達式不帶引號

+0

是的+1,它是引號..它們不是必需的,除此之外,不應該在這裏使用(除非你試圖匹配一個引用;所以如果你想在你的模式中有一個空格,你必須轉義它, \'(在\之後有一個空格...另請注意,要將整行匹配爲字母,您必須添加一個前導'^'和尾部'$',否則它將匹配'123 456 abc。cat和鼠標' – 2011-05-01 07:59:16

+0

@fred,好的,所以你應該把它作爲一個答案,所以OP可以知道。:) – ghostdog74 2011-05-01 08:07:26

14

嘗試

if [[ $line =~ [a-zA-Z]+\. ]] ; then echo hello; fi 
27

的問題是,你是用引號...

在bash正則表達式中,不需要引號,而且,不應該使用它們(除非你試圖匹配一個引號(在這種情況下你可以跳過它)\")...此外,如果你想在你的模式中的空間,你必須逃避它,(後斜線後有一個空格...

還要注意,以匹配整個行作爲字母,您必須添加領先的^和尾隨$,否則它將匹配以下行:123 456 abc. cat and mouse

相關問題