2013-07-03 33 views
1

我目前想實現某種命令的管理體制,沒有什麼大,只是爲了好玩目的(如IRC殭屍,...)C#正則表達式解析參數/標識符

我在C#中做的相當好,所有的邏輯或多或少的設置,但由於我是RegEx方面的noob,所以我找不到解析所有參數和標識符的好方法。我確實想象了一些像「identifier parameter1'參數2和空格'parameter3'的東西。這是我的「概念」,在我看來,僅僅使用字符串方法「Split,Replace,Substring,...」不是一個好的解決方案,但是RegEx可以完成這項工作。

因此,長話短說:這是甚至有可能與RegEx?如何正確解析RegEx?在如何處理論據方面是否有更好的解決方案?

我想爲每個命令創建一個「模式」,然後讓解析器收集所有的字符串。在這種情況下,用戶將不需要使用「」指定的參數,但我想正則表達式將是更好的解決方案...

那麼這就是它,希望幫助:)

回答

0

看看這個正則表達式可以幫助你:

var matches = Regex.Matches(inputStr, @"'[^']*'|\S+"); 

如果你運行它USINT輸入:「標識符參數1參數3‘與空間參數2’」那麼你會得到一個集合有4個要素:

identifier 
parameter1 
'parameter2 with space' 
parameter3 

編輯

我做了一個improoved版本:0​​- 支持''作爲轉義爲',用空格設置了一個param內部時

var matches = 
    Regex.Matches("identifier parameter1 'parameter2 with ''space''' parameter3", 
     @"'(?:[^']|'')*'|\S+") 
     .Cast<Match>() 
     .Select(m => m.Value) 
     .Select(s => s.StartsWith("'") && s.Length >= 2 ? 
      s.Substring(1, s.Length - 2).Replace("''", "'") : s) 
     .ToArray();