我正在將一個SMAPI文法轉換爲JSGF。它們是用於不同語音識別系統的相當類似的語法。 SMAPI使用他們世界其他地方所用的問號來表示0或1。 JSGF爲此使用方括號。所以,我需要將像stuff?
這樣的字符串轉換爲[stuff]
,並將括號內的字符串如((((stuff)? that)? I)? like)?
改爲[[[[stuff] that] I] like]
。我必須獨自留下像((((stuff) that) I) hate)
這樣的字符串。正如Qtax指出的,更復雜的例子是(foo ((bar)? (baz))?)
被(foo [[bar] (baz)])
取代。提取每一級括號的內容
因此,我必須提取每個級別的括號表達式,看它是否以問號結尾,並用方括號代替parens和問號(如果有的話)。 我認爲埃裏克斯特羅姆的回答this問題幾乎是我需要的。問題是,當我使用它時,它會返回最大的匹配分組,而我需要對每個分組進行操作。
這是我到目前爲止:s/(\((?: [^()?]* | (?0))* \)) \?/[$1]/xg
。但是,如果與((((stuff)? that)? I)? like)?
匹配,則僅生成[((((stuff)? that)? I)? like)]
。任何想法如何做到這一點?
我
而不是正則表達式,你可以用一個字符串替換用''''替換'('用'''和')?'用']嗎? –
你的標題說你需要提取圓括號的內容,但是你的文本說你需要將圓括號轉換爲方括號。這是什麼? – TLP
我編輯了這個問題,以更好地反映我的意圖。 –