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、PyPiregex
,您可以使用几个同名的组,并使用如下模式
(?<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=
-aJVM=
子字符串
(?\S+)
-组JvmName
:1+非空白字符
|
-或
(?\S+)
-组JvmName
:1+非空白字符
\s+
-1+空格
profile
-单词profile
*
-尽可能多的0+字符,断线字符除外
)
-组的说明结束
试试@WiktorStribiżew Dziekuje!您的正则表达式是最容易理解的,Toto的对JVM的负面外观很有效,而Tomasso的解释很好,很有效,感觉像是一个答案:)因为它被证明是有用的,我添加了一个。感谢Tommaso的解释!谢谢你的解释!