假设我有以下文本字符串:
user01-s
user01--s
user01
目标是从日志事件中捕获用户名。所以我想抓住:
第一行:user01
第二行:user01-
第三行:user01
每行包含一个Linux用户(可能包含一个-
)。在某些情况下,该行以-s
结尾,并且不应该包含在用户名中。
因此,我的解决方案是:
(?:(\S+)-s)|(\S+)
但是我想知道我们是否可以更好地捕获用户名。
答案 0 :(得分:1)
如果用户名位于整行,则可以使用一个捕获组,该捕获组的可选部分与-s
部分匹配:
^([^\s-]+-?)(?:-s)?$
如果用户名中存在连字符,则可以使用\S
并将其设置为非贪婪\S+?
^(\S+?)(?:-s)?$