2009-12-23 66 views
0

我在正則表達式(.NET語法,我正在使用RegexOptions.Singleline)中的可選組有問題。正則表達式和一個可選字符串

"function (\w*).*?{(?:.*?\((.*?)\))?.*?}"

也試過了,沒有效果: "function (\w*)[^{]+{(?:.*?\((.*?)\))?.*?}"

它看起來像羣是不可選的,因爲如果我只是在FunctionWithNoParameters那麼一切都工作正常,添加兩個括號。目標是有兩個組:函數名稱和它們的可選參數。有人能幫我嗎?

我試圖解析的文字是這樣的:

function test1 
{ 
    param ([int]$parm2, [bool]$parm3) 
} 

function FunctionWithNoParameters { 

return "nothing" 
} 

function test2 { 
    param([string]$parm1, 
     [int]$parm2, 
     [bool]$parm3)} 

謝謝, 亞歷克斯

+0

你不想用正則表達式來解析非常規語言,對嗎? – Gumbo 2009-12-23 13:51:16

+0

不,我不是。這可能不是最好的辦法,對於這個問題;) 我想獲得一個PowerShell腳本中的所有功能(和他們的參數)... – Alex 2009-12-23 13:54:57

回答

0

試試這個:

function (?<name>\w+)\s*?\{\s*?(?<param>param\s*\([\s\S]*?\))?[\s\S]*?\} 

編輯:奇怪,我不能」 t與我測試中的可選param組相匹配

+0

這兩個組合可以做的伎倆,我認爲: '功能(\ w *)[^ {] + {\ s *(? param \ s * \([\ s \ S] *?\))?。*?}' 但是...現在我得到詞「param」和括號。 – Alex 2009-12-23 14:26:57

1

此正則表達式對我的作品給你提供的樣本數據:

@"function\s+(\w+)\s*\{\s*(?:param\s*\(([^()]*)\))?" 

與您正則表達式的主要問題是這一部分:.*?\(。當您匹配第二個函數時,.*?會一直掃描該函數,並在第三個函數中找到左括號。

相關問題