我的服務器收到一個消息像#1037szdx001A8911*
,現在我需要szdx001
稱爲sid
的sid
長度由字符7
決定。長度將是8或9。 使用String.substring()
可以很容易地獲得長度。然後我會根據長度獲得sid
。使用正則表達式來prase指定的協議
但現在我嘗試使用正則表達式。這裏是我的模式。 #(\\d)(\\d{2})(\\d)(\\w{7})(\\w)(\\d{4})*
我的問題是,我可以用java語法中的下列組代替7。
我的服務器收到一個消息像#1037szdx001A8911*
,現在我需要szdx001
稱爲sid
的sid
長度由字符7
決定。長度將是8或9。 使用String.substring()
可以很容易地獲得長度。然後我會根據長度獲得sid
。使用正則表達式來prase指定的協議
但現在我嘗試使用正則表達式。這裏是我的模式。 #(\\d)(\\d{2})(\\d)(\\w{7})(\\w)(\\d{4})*
我的問題是,我可以用java語法中的下列組代替7。
從您提供的正則表達式來看,它看起來像輸入字符串正常分裂成以下字段:
# 1 03 7 szdx001 A 8911 *
和第5場(szdx ...)是可變的唯一領域在尺寸方面?如果這是正確的,那麼你不需要知道它的大小來分析字符串到字段:
#(\d)(\d{2})(\d)(\w+)(\w)(\d{4})*
上述正則表達式將解析前四個字段和最後一個字段,固定大小。可變大小的字段將得到第4和第6字段之間的任何文本。你將不得不單獨檢查第五個字段的長度是否正確。 [注意我在這裏刪除了加倍的反斜槓; 。我們只是談論的正則表達式,而不是在一個字符串常量來指定反斜槓正確的方式]
稍微更嚴格的上述形式是:
#(\d)(\d{2})(\d)(\w{7,9})(\w)(\d{4})*
這限制了第五個領域7至9個字符之間。
如果你必須分析使用只正則表達式的字符串,你不能單獨確認的第五個字段的長度,那麼你可以做這樣的事情:
#(\d)(\d{2})(?:7(\w{7})|8(\w{8})|9(\w{9}))(\w)(\d{4})*
的重要組成部分是(?:7(\w{7})|8(\w{8})|9(\w{9}))
。這是一個非捕獲組,包含三個備選方案:'7'後面跟着7個字符的字符串,或'8'後面跟着8個字符的字符串,或者'9'後面跟着9個字符的字符串。請注意,每個捕獲組的編號將在此處更改; 7,8和9個字符的字符串分別位於不同的捕獲組中,因此您的代碼必須檢查所有三個字符串。
「sid的長度是由字符7決定的」是什麼意思?你的'szdx001'字符串長度爲7個字符,但是你聲明它是'8'或'9'。雖然,你的輸入中的「角色7」在哪裏?它是索引4處的字符嗎?很不清楚...... – Mena 2014-10-31 14:57:06
我很抱歉,我沒有說清楚,字符7在索引4處。索引4中的字符可能是8或9.然後我得到協議的子字符串,其中子字符串的長度是索引4的值。 – jackson 2014-10-31 15:13:56
沒有關於爲什麼只用'7'來解釋字符串長度(而不是'37'或'1037')的信息,我們不能給你任何合理的答案,解析字符串。 – nhahtdh 2014-10-31 17:33:13