2015-01-14 72 views
0

我正在做一個小型項目,我必須閱讀命令行。 命令是一個與模式"\\&[abcd]"匹配的字符串。
如果在上一場比賽和下一場比賽之間有字符串,我必須根據上一個命令對它進行操作。我與while (m.find())循環,我可以得到符合模式(即命令)的字符串,但我不知道如何獲得不匹配模式的字符串。用""替換命令並獲取整個字符串將是一種方法,但是我無法對特定的子字符串執行操作。
那麼如何根據前面的命令對命令之間的字符串進行操作呢?除正則表達式之外的所有東西

代碼我有麻煩寫作:

int i=0; 
while (m.find()) { 
     switch (m.group()) { 
     case "&a": 
      i+=1; 
      break; 
     case "&b": 
      i+=2; 
      break; 
     case "&c": 
      i=4; 
      break; 
     ... 
     } 
    //get non-pattern matching strings and modify it based on previous commands. 
} 

下列輸入:$a$bLola$cg

會產生以下輸出:LolaLolaLolagggg

編輯:

命令數或字符串未設置並且可以按任何順序。如果沒有字符串,則不會打印任何內容。如果沒有命令,字符串將被打印而不修改。
重複答案似乎不適用在這裏:正則表達式捕獲只有字符串(不是命令)不起作用,因爲在第一個while(m.find())循環後,i將完全改變。

以下輸入:$a$bLola$cg將輸出LolagLolagLolagLolag

+2

你可以添加一些字符串及其替換的例子。 – anubhava

回答

-1

這種工作方式是捕獲命令單個匹配的字符串。
只要有一個命令就可以解析整個輸入。
然後每個比賽會給你命令和字符串(分別爲組1和2)。

無論何時捕獲一個字符串,都要根據這些命令對其進行操作,並將其追加到一個新的字符串中。

這是命令字符串之前:

# "(?s)(&[abcd])((?:(?!&[abcd]).)+)?" 

(?s)       # Dot-all modifier, dot matches any character 
(& [abcd])     # (1), Command, required 

(       # (2 start), String 
     (?:       # Cluster start 
      (?! & [abcd])    # Lookahead assertion, not a command ahead 
      .        # Assertion passed, grab this character 
    )+       # Cluster end, do 1 to many times 
)?        # (2 end), optional 

這是串之後的命令:
隨你挑。

# "(?s)((?:(?!&[abcd]).)+)?(&[abcd])" 

(?s)       # Dot-all modifier, dot matches any character 
(       # (1 start), String 
     (?:       # Cluster start 
      (?! & [abcd])    # Lookahead assertion, not a command ahead 
      .        # Assertion passed, grab this character 
    )+       # Cluster end, do 1 to many times 
)?       # (1 end), Optional 
(& [abcd])     # (2), Command, Required 
相關問題