基于属性及其值的正则表达式

问题描述 投票:0回答:1

我对正则表达式有疑问,在这里是我的文字:

1 200 file:test01.txt, action:read, User:dummy
2 201 file:test01.txt, action:write, User:dummy
3 202 file:unknown, keepalive , User:dummy
4 450 file:test01.txt, action:read, User:dummy
5 500 file:test01.txt, action:read, User:dummy
6 201 profiles, action:reload, User:dummy

我想处理所有行:

  1. 第二列在20 [012]
  2. 未读操作
  3. 不存在操作

所以我会匹配:

2 201 file:test01.txt, action:write, User:dummy
3 202 file:unknown, keepalive , User:dummy
6 201 profiles, action:reload, User:dummy

我正在寻找一种获取行的方式,其中:动作与读取不同,并且没有出现动作

我以多种方式尝试都没有成功,这是我的最后一个失败,第一行仍然存在...

^\d+\s+(?<code>(20[012])).*(action:(?<!read))?

https://regex101.com/r/HGESxR/1

有任何提示吗?

谢谢马塞洛

regex pcre regex-group
1个回答
0
投票

您可以使用

^\d+\s+(?<code>20[0-2])\s(?:.*action:(?!read)(?<action>\w+)|(?!.*action)).*

请参见regex demo

详细信息

  • ^-字符串开头
  • \d+-1个以上的数字
  • \s+-1+空格
  • [(?<code>20[0-2])-组”代码:20,然后是012
  • \s-空格
  • (?:.*action:(?!read)(?<action>\w+)|(?!.*action))-与任何一个非捕获组匹配
    • [.*action:(?!read)(?<action>\w+)-0+个除换行符以外的字符,尽可能多地为action:子字符串,然后进行“动作”组捕获任何1+个单词的字符,但不以read字符序列开头
    • |-或
    • [(?!.*action)-紧接在右边,除换行符外,尽可能多的0+个字符后不应有action]
  • [.*-尽可能多0+个除换行符以外的字符]
© www.soinside.com 2019 - 2024. All rights reserved.