2011-09-15 68 views
0

工作,我需要到grep一個服務器上的一些文件,所以我很快就破解了,並在JavaScript控制檯測試了正則表達式來滿足我的需求:轉換的Javascript正則表達式使用grep或桑達

var regexp = /mssql_query\s*\([\"\'][a-z0-9_\s]*(_sp|usp_)/i 

// want to pass 
regexp.test('mssql_query ("something_sp') 
regexp.test('mssql_query("exec something_sp') 
regexp.test("mssql_query('something_else_sp") 
regexp.test('mssql_query("_usp_sp') 
regexp.test('mssql_query ("_usp_somethig') 
regexp.test("mssql_query('_usp_something_else") 

// want to fail 
regexp.test('mssql_query ("something_s') 
regexp.test('mssql_query("exec something_p') 
regexp.test('mssql_query("select') 

表達完美的作品對於我所有的測試用例,我似乎無法得到表達式來處理grep。 有沒有辦法將EMCA表達式轉換爲ERE或BRE表達式,以便我可以在grep或sed中使用它?

我試過調整它在grep中工作,但失敗了。

+1

你爲什麼從'\ s'中創建角色類?沒有意義。 –

+0

不知道爲什麼我那裏有。 – ActionOwl

+0

您也不需要轉義[] – Gerben

回答

0
grep "mssql_query *([\"\'][a-z0-9_ ]*_sp\|usp_" 

應該做的工作。它正在尋找:

  1. mssql_query,然後
  2. 0或多個空格(這是" *"),然後
  3. (,然後是「或」(這是([\"\']),然後
  4. 0以上是小寫字母,數字,字符下劃線或空格(這是[a-z0-9_ ]*),然後
  5. _SP或usp_(這是_sp\|usp_
+0

中的字符我添加了一個小改動,並使用:grep「mssql_query *([\」\'] [a-zA-Z0-9_] * _ sp \ | usp_「。 .. 我最初使用\ s,以便它也可以匹配標籤,但事後看來,我不知道爲什麼會有一個標籤。 – ActionOwl

+0

看到我的答案,只需使用正確選項的grep,無需更改你已經測試過的正則表達式,儘管我已經接受了這個答案,但我猜它有點晚了。 – sillyMunky

0

使用egrep(grep -E的別名,使用擴展的正則表達式)。

而不是/ i修飾符對grep使用-i標誌。