Ruby 仅匹配匹配块(如果匹配块前面出现起始词,则忽略)
我的意见如下: 输入Ruby 仅匹配匹配块(如果匹配块前面出现起始词,则忽略),ruby,regex,rubular,Ruby,Regex,Rubular,我的意见如下: 输入 StatusMsg: seqId: 14043 timestamp: 140707 dId: "Sa01" msgType: SEQUENCE eventType: UPDATE_CMD devContext { context: IDLE operationalMode: 1 logHistory { start: 1404387563607 end: 1404387563616 } } manifest { time
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:
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: "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: 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:
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到Accepted进行选择。有人能帮助构建正确的正则表达式吗?您只需要对正则表达式做一点小的更改就可以做到这一点。注意,对于正则表达式,您还需要在末尾使用
m
标志
更新的正则表达式:
/(StatusMsg:(?!.*StatusMsg:).*?dId:\s*"Sa01".*?eventType: UPDATE_CMD.*?response\s*{[\s\n\w\.:]*dId:\s*"Sa01"[\s\n\w\.:]*status:\s*Accepted)/m
注意:对于使用rubular进行测试,请在开始处去掉/
,在结束处去掉/m
,然后将m
放在输入正则表达式的文本框右侧的小文本框中。这将设置要应用的m
标志,其作用是使正则表达式中的
匹配换行符(不是默认行为)
唯一改变的是
StatusMsg:.*?
变成
StatusMsg:(?!.*StatusMsg:).*?
这适用于负面外观。这实际上是告诉您的正则表达式仅在正则表达式匹配的地方匹配,但仅当匹配不包含两个字符串批时才匹配StatusMsg
如果StatusMsg
总是出现在行首,前面没有空格,您可以通过执行以下操作使其更加具体:
^StatusMsg:(?!.*^StatusMsg:).*?
感谢您提供的解决方案。只有当匹配的部分位于输入的最后一部分时,您的解决方案才有效。我已经修改了输入,因此预期的匹配不是最后一组消息。你能帮我选择当前输入的预期匹配项吗?嗯,还没有找到一个纯正则表达式的解决方案;但是您可以通过执行input\u str.split(/^StatusMsg/)
,然后在数组中的返回对象中迭代搜索所需的模式来简化操作。有人找到了这个问题的答案吗