作爲我撰寫系統的一部分,用戶可以創建自己的自定義規則,以便在發生某些事件時運行。將僞代碼轉換爲可用(使用正則表達式?)
有對象,他們可以用它來創建這些規則,都具有屬性和方法的一組數的一組數:
所以按照規則的例子,我們可以說:
「如果這個單元獎項是‘區別’然後設置本機上所有標準獎‘取得’」
IF UNIT.award equals 「Distinction」
THEN UNIT.criteria.set_award(‘A’)
「否則,如果該單元獎項是‘優異’,然後設置任何標準獎勵給本單位的名字以‘P’或‘M’到‘取得’開始於」
IF UNIT.award equals 「Merit」
THEN UNIT.criteria.filter(‘starts’, ‘name’, ‘P’, ‘M’).set_award(‘A’)
「否則,如果該單元獎項是「通過,則設置任何標準獎勵給本單位,其名稱開頭的‘P’到‘取得’」
IF UNIT.award equals 「Merit」
THEN UNIT.criteria.filter(‘starts’, ‘name’, ‘P’).set_award(‘A’)
我遇到的問題是,我只是不知道如何把這個字符串對象,屬性&方法,例如「UNIT.criteria.filter('starts','name','P')。set_award('A')」並將其轉換爲可用的東西。
最終的結果,我想將字符串轉換爲將沿着線的東西:
因此,我可以再轉化實際適當的對象,並返回相關的值或運行相關的方法。
因爲只需要一些我需要支持的東西(至少現在是這樣),而且我不需要像計算支持或變量那樣的任何複雜的東西,創建一個Lexer系統似乎矯枉過正,所以我在想只是使用正則表達式來分割所有的部分。因此,使用上面的例子,我可以對「。」字符進行簡單分割,但是如果該字符用於方法參數中,例如, 「CRITERION.filter('是','名稱','P.1')」然後將其完全擰緊。
我可以使用不太常見的字符來分割它們,例如雙冒號或「::」,但如果出於某種原因某人將其放入參數中,它仍會導致相同的問題。我已經嘗試創建一個正則表達式來分割字符,只有當它不在引號之間時,但我無法使其正常工作。
所以基本上我的問題是:一個正則表達式是否是最好的方法來做到這一點? (如果是這樣,任何人都可以幫助我讓它忽略指定的字符,如果它在方法中)。還是有另一種方式可以做到這一點,會更容易/更好?
謝謝。
也許你應該搜索「表達式語言」。 「Symfony」排在我的搜索結果的頂部,例如, http://jwage.com/post/76799775984/using-the-symfony-expression-language-for-a-reward。 – JimmyB
這需要使用Symfony本身,還是可以單獨使用?由於我們正在使用另一個CMS風格的系統,所以我無法爲此安裝整個框架。乾杯。 –
不能說。乍一看,它似乎相當獨立:https://github.com/symfony/expression-language – JimmyB