我有一個相當簡單的正則運算式(諷刺關閉),而 ruby?? 對它的處理方式與預期不同
string = puts worksheet.sheet_data[5][10].value
string.split(/(?>(?>\([^()]*(?R)?[^()]*\))|(?>\[[^[\]]*(?R)?[^[\]]*\])|(?>{[^{}]*(?R)?[^{}]*})|(?>"[^"]*")|(?>[^(){}[\]", ] ))(?>[ ]*(?R))*/)
我已經取出 (?R) 并用 \g<1> 替換它,但運行它后我仍然收到以下錯誤:char-class 的過早結束:
我被告知我需要轉義一些右括號,因為 ruby?? 中的 [^()] 被視為好像 ] 仍然是集合的一部分,所以我必須將其更改為 [^()\]。我做了所有這些,我的正則運算式現在看起來像這樣:
string.split(/(?>(?>\([^()\]*\g<1>?[^()\]*\))|(?>\[[^[]\]*\g<1>?[^[]\]*])|(?>{[^{}\]*\g<1>?[^{}\]*})|(?>"[^"\]*")|(?>[^(){}[]", \] ))(?>[ \]*\g<1>)*/)
它與我洗掉以前的 \] 轉義字符基本相同,因為 ruby?? 將它們視為轉義字符,并將 \ 添加到沒有的右括號中。Ruby 仍然拋出同樣的例外。我之前在 regexr.com 上嘗試過正則運算式,所以它必須作業。
編輯:
示例文本是屬性 1、屬性 2(進一步規范、(甚至進一步規范等)、另一個規范)、屬性 3、屬性 4
我應該得到屬性1,屬性2(進一步的規范,(甚至進一步的規范等),另一個規范),屬性3,屬性4
括號內的逗號應該被忽略
uj5u.com熱心網友回復:
而不是\g<1>,您需要\g<0>因為\g<1>遞回捕獲組#1 模式,并(?R)遞回整個正則運算式模式(并且整個模式是組 0)。
確保您在字符類中轉義[,]它們在 Onigmo 正則運算式庫中是特殊的。
你需要
(?>(?>\([^()]*\g<0>?[^()]*\))|(?>\[[^\[\]]*\g<0>?[^\[\]]*\])|(?>{[^{}]*\g<0>?[^{}]*})|"[^"]*"|[^(){}\[\]", ] )(?>[ ]*\g<0>)*
請參閱Rubular 演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/497653.html
