1
我有我的輸入如下,僅匹配匹配塊(如果起始字匹配塊之前出現無視)
輸入
StatusMsg:
seqId: 14043
timestamp: 140707
dId: "Sa01"
msgType: SEQUENCE
eventType: UPDATE_CMD
devContext {
context: IDLE
operationalMode: 1
logHistory {
start: 1404387563607
end: 1404387563616
}
}
manifest {
timestamp: 1404387733059
dev {
dId: "Sa01"
mainComponent {
serialNum: "10001"
deviceClass: "Sap"
componentType: "Sa01"
subcomponentNum: 1
}
}
info {
name: "Sa01"
channels: 1
lib {
name: "l.bin"
timestamp: 1404387733059
version: "6870711ee"
validStartDate: 1404387733059
}
activeSW {
name: "Sa01"
timestamp: 1404387733059
version: "12.001"
validStartDate: 1404387733059
}
activeCSW {
name: "Sa01"
timestamp: 1404387733059
version: "03.001"
validStartDate: 1404387733059
}
}
}
powerStatus {
powerEvent: ON
powerSource: AC
chargerStatus: CHARGING
batteryStatus: GOOD
}
status {
msgHeader {
messageId: 13
timestamp: 1404387733059
seqNum: 13
sourceId: 13
numOfParams: 0
}
infuserState: READY
keypadLockout: UNLOCKED
}
cmdResponse {
cmdType: A_PGM
aPgm {
dId: "Sa01"
refId: 79
request {
refId: 79
libId: "6870711eedb"
channelId: 1
lId: 1
pgmType: FULL
aPgmType: NEW
externalId: "EXT_ID_9"
stats {
WG: 76230
HG: 150500
BS: 1790
}
multi: false
}
response {
dId: "Sa01"
files: 1.bin
major: 338013710701
status: Received
}
}
}
[2014-07-07 14:10:41.034] I/O Received
StatusMsg:
seqId: 14043
timestamp: 140707
dId: "Sa01"
msgType: SEQUENCE
eventType: UPDATE_CMD
devContext {
context: IDLE
operationalMode: 1
logHistory {
start: 1404387563607
end: 1404387563616
}
}
manifest {
timestamp: 1404387733059
dev {
dId: "Sa01"
mainComponent {
serialNum: "10001"
deviceClass: "Sap"
componentType: "Sa01"
subcomponentNum: 1
}
}
info {
name: "Sa01"
channels: 1
lib {
name: "l.bin"
timestamp: 1404387733059
version: "6870711ee"
validStartDate: 1404387733059
}
activeSW {
name: "Sa01"
timestamp: 1404387733059
version: "12.001"
validStartDate: 1404387733059
}
activeCSW {
name: "Sa01"
timestamp: 1404387733059
version: "03.001"
validStartDate: 1404387733059
}
}
}
powerStatus {
powerEvent: ON
powerSource: AC
chargerStatus: CHARGING
batteryStatus: GOOD
}
status {
msgHeader {
messageId: 13
timestamp: 1404387733059
seqNum: 13
sourceId: 13
numOfParams: 0
}
infuserState: READY
keypadLockout: UNLOCKED
}
cmdResponse {
cmdType: A_PGM
aPgm {
dId: "Sa01"
refId: 79
request {
refId: 79
libId: "6870711eedb"
channelId: 1
lId: 1
pgmType: FULL
aPgmType: NEW
externalId: "EXT_ID_9"
stats {
WG: 76230
HG: 150500
BS: 1790
}
multi: false
}
response {
dId: "Sa01"
files: 1.bin
major: 35723057325
status: Valid
}
}
}
[2014-07-07 14:15:71.028] I/O Received
StatusMsg:
seqId: 14043
timestamp: 140707
dId: "Sa01"
msgType: SEQUENCE
eventType: UPDATE_CMD
devContext {
context: IDLE
operationalMode: 1
logHistory {
start: 1404387563607
end: 1404387563616
}
}
manifest {
timestamp: 1404387733059
dev {
dId: "Sa01"
mainComponent {
serialNum: "10001"
deviceClass: "Sap"
componentType: "Sa01"
subcomponentNum: 1
}
}
info {
name: "Sa01"
channels: 1
lib {
name: "l.bin"
timestamp: 1404387733059
version: "6870711ee"
validStartDate: 1404387733059
}
activeSW {
name: "Sa01"
timestamp: 1404387733059
version: "12.001"
validStartDate: 1404387733059
}
activeCSW {
name: "Sa01"
timestamp: 1404387733059
version: "03.001"
validStartDate: 1404387733059
}
}
}
powerStatus {
powerEvent: ON
powerSource: AC
chargerStatus: CHARGING
batteryStatus: GOOD
}
status {
msgHeader {
messageId: 13
timestamp: 1404387733059
seqNum: 13
sourceId: 13
numOfParams: 0
}
infuserState: READY
keypadLockout: UNLOCKED
}
cmdResponse {
cmdType: A_PGM
aPgm {
dId: "Sa01"
refId: 79
request {
refId: 79
libId: "6870711eedb"
channelId: 1
lId: 1
pgmType: FULL
aPgmType: NEW
externalId: "EXT_ID_9"
stats {
WG: 76230
HG: 150500
BS: 1790
}
multi: false
}
response {
dId: "Sa01"
files: 1.bin
major: 27151510570
status: Accepted
}
}
}
[2014-07-07 14:15:51.034] I/O Received
StatusMsg:
seqId: 14043
timestamp: 140707
dId: "Sa01"
msgType: SEQUENCE
eventType: UPDATE_CMD
devContext {
context: IDLE
operationalMode: 1
logHistory {
start: 1404387563607
end: 1404387563616
}
}
manifest {
timestamp: 1404387733059
dev {
dId: "Sa01"
mainComponent {
serialNum: "10001"
deviceClass: "Sap"
componentType: "Sa01"
subcomponentNum: 1
}
}
info {
name: "Sa01"
channels: 1
lib {
name: "l.bin"
timestamp: 1404387733059
version: "6870711ee"
validStartDate: 1404387733059
}
activeSW {
name: "Sa01"
timestamp: 1404387733059
version: "12.001"
validStartDate: 1404387733059
}
activeCSW {
name: "Sa01"
timestamp: 1404387733059
version: "03.001"
validStartDate: 1404387733059
}
}
}
powerStatus {
powerEvent: ON
powerSource: AC
chargerStatus: CHARGING
batteryStatus: GOOD
}
status {
msgHeader {
messageId: 13
timestamp: 1404387733059
seqNum: 13
sourceId: 13
numOfParams: 0
}
infuserState: READY
keypadLockout: UNLOCKED
}
cmdResponse {
cmdType: A_PGM
aPgm {
dId: "Sa01"
refId: 79
request {
refId: 79
libId: "6870711eedb"
channelId: 1
lId: 1
pgmType: FULL
aPgmType: NEW
externalId: "EXT_ID_9"
stats {
WG: 76230
HG: 150500
BS: 1790
}
multi: false
}
response {
dId: "Sa01"
files: 1.bin
major: 35723057325
status: Valid
}
}
}
我要保證以下是強制性存在於與相同的順序輸入,
StatusMsg:
dId: "Sa01"
eventType: UPDATE_CMD
cmdResponse
cmdType: A_PGM
response
dId: "Sa01"
status: Accepted
的預期輸出
StatusMsg:
seqId: 14043
timestamp: 140707
dId: "Sa01"
msgType: SEQUENCE
eventType: UPDATE_CMD
devContext {
context: IDLE
operationalMode: 1
logHistory {
start: 1404387563607
end: 1404387563616
}
}
manifest {
timestamp: 1404387733059
dev {
dId: "Sa01"
mainComponent {
serialNum: "10001"
deviceClass: "Sap"
componentType: "Sa01"
subcomponentNum: 1
}
}
info {
name: "Sa01"
channels: 1
lib {
name: "l.bin"
timestamp: 1404387733059
version: "6870711ee"
validStartDate: 1404387733059
}
activeSW {
name: "Sa01"
timestamp: 1404387733059
version: "12.001"
validStartDate: 1404387733059
}
activeCSW {
name: "Sa01"
timestamp: 1404387733059
version: "03.001"
validStartDate: 1404387733059
}
}
}
powerStatus {
powerEvent: ON
powerSource: AC
chargerStatus: CHARGING
batteryStatus: GOOD
}
status {
msgHeader {
messageId: 13
timestamp: 1404387733059
seqNum: 13
sourceId: 13
numOfParams: 0
}
infuserState: READY
keypadLockout: UNLOCKED
}
cmdResponse {
cmdType: A_PGM
aPgm {
dId: "Sa01"
refId: 79
request {
refId: 79
libId: "6870711eedb"
channelId: 1
lId: 1
pgmType: FULL
aPgmType: NEW
externalId: "EXT_ID_9"
stats {
WG: 76230
HG: 150500
BS: 1790
}
multi: false
}
response {
dId: "Sa01"
files: 1.bin
major: 27151510570
status: Accepted
}
}
}
我試圖與正則表達式,
(StatusMsg:.*?dId:\s*"Sa01".*?eventType: UPDATE_CMD.*?response\s*{[\s\n\w\.:]*dId:\s*"Sa01"[\s\n\w\.:]*status:\s*Accepted)
上述表達式從第一StatusMsg選擇直到接受。任何人都可以幫助構建正確的正則表達式嗎?
謝謝你的解決方案。只有匹配的部分位於輸入的最後部分,您的解決方案纔有效。我修改了輸入,以便我的預期匹配不是最後一組消息。你能幫我選擇當前輸入的預期匹配嗎? – MIZ
嗯。還沒有提出一個純粹的正則表達式解決方案;但是你可以通過'input_str.split(/^StatusMsg /)'讓自己更容易,然後遍歷數組中返回的對象,搜索你想要的模式。 – bdx
任何人都得到了這個問題的答案 – MIZ