Regex 正则表达式可选替代搜索

Regex 正则表达式可选替代搜索,regex,regex-group,Regex,Regex Group,我正在尝试使用正则表达式从一些文本中获取一些分组信息。 所需的结果超出了文本范围:请检查JVM的运行状况=acq855SW1-srv1请检查acq855SW1-srv2配置文件。要获得 第一个匹配:描述为“请检查 JVM=acq855SW1-srv1'和JVM'acq855SW1-srv1' 第二个匹配:描述为“请检查acq855SW1-srv2配置文件。它似乎已关闭”和JVM“acq855SW1-srv2” 到目前为止,我的正则表达式是(?*)(?:JVM=|)和(?[^\s]+)(?:p

我正在尝试使用正则表达式从一些文本中获取一些分组信息。 所需的结果超出了文本范围:
请检查JVM的运行状况=acq855SW1-srv1请检查acq855SW1-srv2配置文件。要获得

  • 第一个匹配:描述为“请检查 JVM=acq855SW1-srv1'和JVM'acq855SW1-srv1'
  • 第二个匹配:描述为“请检查acq855SW1-srv2配置文件。它似乎已关闭”和JVM“acq855SW1-srv2”
到目前为止,我的正则表达式是
(?*)(?:JVM=|)和(?[^\s]+)(?:profile.*+|))
,我试图避免这样一个事实,即它也将“请检查运行状况”作为匹配项


我怎样才能使它不停在“健康”上呢?

一个简单的解决方法是将健康与其他健康区分开来,并添加一个约束,即该值必须包含一个
-

这可以通过将
[^\s]+
更改为
[^\s]+-[^\s]+
来完成

因此,正则表达式的结果是:

(?*?JVM=)(?[^\s]+-[^\s]+)(?:profile.++)

如果
-
是一个无法完成的假设,那么您可以对数字执行相同的操作

[^\s]+\d[^\s]+

我会使用:

(?<Description>(?:(?!JVM=).)*the (?:JVM=)?(?<JvmName>\S+)(?: profile.*+)?)
(?(?:(?!JVM=)*(:JVM=)(?\S+(:profile.*))

对于PCRE和其他一些引擎,如Ruby、.NET、PyPi
regex
,您可以使用几个同名的组,并使用如下模式

(?<Description>.*?the\s+(?:JVM=(?<JvmName>\S+)|(?<JvmName>\S+)\s+profile.*))
(?*?\s+(?:JVM=(?\s+)|(?\s+\s+配置文件。*))
要使其在PCRE中工作,请在图案开始处添加
(?J)
,以启用该功能

详细信息

  • (?
    -开始
    说明
    组:
    
    • *?
      -除换行符以外的任何0+字符,尽可能少
    • 这个词
    • \s+
      -1+空格
    • (?:JVM=(?\S+)|(?\S+)\S+配置文件。*)
      -非捕获组匹配:
      • JVM=(?\S+)
      • JVM=
        -a
        JVM=
        子字符串
      • (?\S+)
        -组
        JvmName
        :1+非空白字符
      • |
        -或
      • (?\S+)
        -组
        JvmName
        :1+非空白字符
      • \s+
        -1+空格
      • profile
        -单词
        profile
      • *
        -尽可能多的0+字符,断线字符除外
  • -组的
    说明结束

试试@WiktorStribiżew Dziekuje!您的正则表达式是最容易理解的,Toto的对JVM的负面外观很有效,而Tomasso的解释很好,很有效,感觉像是一个答案:)因为它被证明是有用的,我添加了一个。感谢Tommaso的解释!谢谢你的解释!