2011-12-21 126 views
-3

我的任務是在java和shell腳本中編寫一個正則表達式,它將驗證所有隻包含單個數字的字符串以及該數字之前或之後的任意數量的字符。Java中的正則表達式在Shell腳本中的正則表達式

我寫[a-z]*[0-9]{1}[a-z]*,它爲運行良好的Java但不是在所有工作Shell腳本 誰能幫我創建一個常規esxpression在Shell腳本

滿足我的要求編輯(來自評論): 我試過grep,但它沒有給我有用的結果。 [...]如果字符串驗證我想執行某些操作。所以我用它像

if [$password eq [a-z]*[0-9]{1}[a-z]]; then 
    # "do this" 
else 
    # "do that" 
fi 

你能不能把對Java語法差異一些輕和shell腳本正則表達式相關?

+0

哪種腳本語言?哪個操作系統? – duffymo 2011-12-21 10:50:58

+0

你可以顯示你在shell中使用的代碼嗎? – 2011-12-21 10:51:23

+0

你在shell腳本中是指什麼正則表達式?通過哪個工具? grep的?包含正則表達式的shell cmd是怎樣的?順便說一句{1}可以省略 – Kent 2011-12-21 10:52:41

回答

1

您沒有指定哪個工具應該評估shell環境中的正則表達式。但大多數工具不會識別{1}部分。無論如何,這部分並不是必需的,因爲僅有一個[0-9]也適用於一個事件。

shell腳本的一部分應該是這樣的:

if [[ "$var" =~ ^[a-zA-Z]*[0-9][a-zA-Z]*$ ]]; then 
    echo matching 
else 
    echo not matching 
fi 

的關鍵部分是:

  • 使用[[表達,而不是[之一,因爲前者支持模式匹配(通過== )和正則表達式匹配(通過=~
  • 與大多數正則表達式庫一樣,=~將返回true如果th e模式匹配任意部分字符串,不一定是完整的字符串。例如[a-z]*[0-9][a-z]*將與foo123bar456bla匹配,因爲該模式匹配3bar部分,「零次出現第一個[a-z],一次出現[0-9],第三次出現第二次出現[a-z]」。因此,需要使用^$將正則表達式固定到字符串的開頭和結尾。

在Java:

String var = ...; 
if(var.matches("[a-zA-Z]*[0-9][a-zA-Z]*")) 
    System.out.println("matches"); 

這裏String.matches隱含完整的字符串相匹配。這一切都被歷史搞糊塗了。

+0

感謝您的回覆 – 2011-12-21 11:18:29

+0

感謝您的回覆... 我試着用grep但它didnot給了我有用的結果。 基本上我想在if語句中使用它,如果字符串驗證,我想執行某些操作。 所以我用它像 if [$ password eq [a-z] * [0-9] {1} [a-z]]; 然後 「做這個」 其他 「做」 網絡 你可以把一些光在語法中DIFF java和有關正則表達式 – 2011-12-21 11:25:34

+0

@omkarsohani shell腳本:請移動您的評論到問題本身,因爲它是對於答案很重要。以後搜索相似信息的人可能無法找到相關信息。 – 2011-12-21 11:33:55