2017-08-02 253 views
-1

我为我的SIEM编写了一个正则表达式来捕获用于Windows安全事件4740 - 用户帐户锁定的呼叫者计算机名称。正则表达式为空字符串

问题是,有时“调用者计算机名称”字段有一个空值或空值,我的正则表达式不考虑它。其余的影响是,无论何时用空值捕获事件,它都会导致我的自定义电子邮件通知中出现语法问题。

link上Regex101:

Caller Computer Name:\s+([^ ]+) 

Caller Computer Name:第二次出现没有找到,但我想找到子。我如何编写一个说明任一条件的正则表达式?是否有价值。

回答

1

如果存在空值,正则表达式将匹配,因为*与0或更多个烤箱匹配(如果字符串后面没有字符)。

/Caller Computer Name:\s*[^ ]*/ 
+0

我将其封装为捕获组,它似乎解决了我的电子邮件通知中的xml问题。该字段不仅仅显示“空白”。 '来电显示名称:(\ s * [^] *)' – Heisenberg

+0

[Regex demo](https://regex101.com/r/9T7Ww3/1) – Heisenberg

2

使用

Caller Computer Name:\s*(\S*) 

\S*匹配0或多个非空白字符。

查看regex demo

完整图案详细

  • Caller Computer Name: - 字面Caller Computer Name:
  • \s* - 0或多个空白字符
  • (\S*) - 捕获组#1中的匹配程度比其他0或多个字符空白。

注有在Java中(\S+)?(\S*)之间的差:在第一组将是无效如果没有值,而第二个将与空字符串进行初始化。

+0

“s * - 1个或更多空白字符”拼写错误。应该是0或更多 –