2013-10-29 102 views
2

對於上下文,請檢查this SO帖子。Powershell腳本中的邏輯轉換

完整的腳本:

(get-content file.txt -ReadCount 0) -replace '([^,]")"','$1' | set-content newfile.txt

我專門找邏輯在腳本的這部分譯文:

'([^,]")"','$1' |

有人可以請任何解釋的邏輯/語法,還是指向正確的方向?

+0

看起來有點像正規表達式給我。 –

+0

能否請您在搜索模式中解釋操作員?我找不到'^'符號的含義。 –

回答

3

'([^,]")"'是一個正則表達式匹配任意字符,除了一個逗號後面是兩個連續的雙引號。括號將第一個字符和第一個雙引號組合在一起。

'$1'是對比賽中的組的反向引用,其在替換中意味着「用僅第一組替換比賽」,例如,在字符串foo""bar中,序列o""將被替換爲o",因此刪除了第二個雙引號。

|是一個管道,它將替換結果送入管道中的下一個cmdlet(Set-Content newfile.txt)。

+0

美麗。非常感謝。 –

1

^符號匹配字符串的開頭。
偉大的參考文獻herehere很好地解釋了一切。
功率外殼中的正則表達式簡介here

當^符號出現在括號[]將匹配任何不包括接下來的胡蘿蔔

+0

好的。你能翻譯這裏表達的邏輯:''([^,]「)」','$ 1''? –

+0

在字符類[[]]'中,'^'與字符串的開始字符不匹配。在'[]'內部,它匹配一個文字插入符號。 – Eris

+1

@Eris你們都錯了。在方括號內,插入符將字符類反轉。 '[^,]'表示「除逗號之外的任何字符」。 –

2
'([^,]")"','$1' 

讓我們打入兩件正則表達式模式'([^,]")"'和替換文本'$1'這一點。正則表達式模式中的()創建了通過$1在替換文本中引用的未命名捕獲組,即它是第一個(也是唯一的情況下)一組parens。匹配的&捕獲在此捕獲組中的是除逗號後面的任何字符,後跟雙引號,並且在捕獲組之外還有另一個雙引號。因此,它將消除兩個連續雙引號中的一個,除非第一個前面加逗號。

+0

非常感謝您的解釋。 upvoted。 –