我有一個字串
"A;BB;C[1;22];DDD[11;2;33];EEEEE[1111]"
我會把它分成
["A","BB","C[1;22]","DDD[11;2;33]","EEEEE[1111]"]
字符和數字代表任何 1-x 字符長度的字串。
我的正則運算式就像
/(?<!(\w )\[)(\;(?!((\w )((\;)(\w )){0,}\])))/
https://regex101.com/r/fWNHBB/2
但我沒有讓它在紅寶石中運行。有人能幫我一下嗎?
uj5u.com熱心網友回復:
您可以使用
text.scan(/(?:\[[^\]\[]*\]|[^;]) /)
詳情:
(?:- 非捕獲組的開始:\[- 一個[字符[^\]\[]*[- 除了and之外的零個或多個字符]\]- 一個]字符
|- 或者[^;]- 除字符外的任何單個;字符
)- 小組結束,重復一次或多次。
請參閱Ruby 演示:
text = "A;BB;C[1;22];DDD[11;2;33];EEEEE[1111]"
puts text.scan(/(?:\[[^\]\[]*\]|[^;]) /)
輸出:
A
BB
C[1;22]
DDD[11;2;33]
EEEEE[1111]
uj5u.com熱心網友回復:
您可以按如下方式進行。
str = "A;BB;C[1;22];DDD[11;2;33];EEEEE[1111]"
rgx = /;(?![^\[\]]*\])/
str.split(rgx)
#=> ["A", "BB", "C[1;22]", "DDD[11;2;33]", "EEEEE[1111]"]
演示
正則運算式可以分解如下。
; # match ';'
(?! # begin negative lookahead
[^\[\]]* # match >= chars other than '[' and ']'
\] # match ']'
) # end negative lookahead
我假設括號是匹配的而不是重疊的。也就是說,每個左括號后面跟著一個右括號,中間沒有左括號或右括號,每個右括號前面都有一個左括號,中間沒有左括號或右括號。
可以使用以下正則運算式來確認括號匹配且不重疊。
\A[^\[\]]*(?:\[[^\[\]]*\][^\[\]]*)*[^\[\]]*\z
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/465811.html
