我需要正则表达式的帮助。
我们有以下字符串:
$VAR = [1550181700, '"xyz (gmail.com)" ', 'Hi Team, Please ON HOLD,HostName: kmkkmk.abc.com, Job Name: dat-inh-ndw-q9n580_prd106.f, Job Name: dat -inh-rdm-q9n717_jdapfrdly.b,工作名称:dat-inh-rdm-q9n717_jdapfrdly.b,问候,DSG 团队']
在上面的字符串中,我需要在“Job Name:”之后和下一个 COMMA(,) 之前捕获任何内容,这意味着我必须获得一个字符串列表作为输出,其中包含如下内容:[dat-inh-ndw-q9n580_prd106.f, dat-inh-rdm-q9n717_jdapfrdly.b,dat-inh-rdm-q9n717_jdapfrdly.b]
注意:我们不知道“Job Name:”在上面的字符串中可能出现多少次。
嗯,这在一定程度上取决于您的基础设施。基本上,您的 Regex 看起来有点像这样(假设为 .NET 语法):
"Job Name:\\s*([^,]*)"
这将捕获字符串“JobName:”后跟任意数量的空格。然后,我们有一个包含任意数量字符的捕获组,这些字符不是逗号 ([^,]*)。使用它,您可以开始一个匹配过程,它将为您提供第一个捕获组中所需的所有字符串。
这就是基础设施的用武之地。您是否需要在 .NET 上下文、JavaScript、PHP 或其他环境中使用它?命令将根据所使用的技术而有所不同。
更新 1: (Perl 代码)
$s = "$VAR = [1550181700, '\"xyz (gmail.com)\" ', 'Hi Team,Please ON HOLD,HostName: kmkkmk.abc.com,Job Name: dat-inh-ndw-q9n580_prd106.f,Job Name: dat-inh-rdm-q9n717_jdapfrdly.b,Job Name: dat-inh-rdm-q9n717_jdapfrdly.b,regards,DSG Team']";
@jobNames = [];
while($s =~ /Job Name:\s*([^,]*)/gi) {
push @jobNames, $1;
}
这将为您提供@jobNames 数组中所需的所有名称。但是,如果您只需要正则表达式作为函数的参数,我们可能需要稍微更改一下。
更新2:(使用后视断言)
您实际上可能正在寻找的是所谓的零宽度后视断言。它定义了一个要匹配的模式,但不包含在结果中。然后,正则表达式将如下所示:
/(?<=Job Name: )[^,]*/
该(?<=...)
构造告诉正则表达式仅匹配以下模式,如果它前面是括号中定义的任何内容,在您的情况下为“作业名称:”。但是,这不应包含在结果中。因此,只有模式的其余部分将成为您结果的一部分。
注意:您可能已经注意到,我用\s*
常规空格替换了冒号后的构造。这是因为在使用 \s* 构造时,我的在线 perl 操场给了我一个“在正则表达式中未实现的可变长度后视”错误。然而,它可能适用于您的 perl 实现。如果您确定,在冒号后面总会有一个空格,您可以继续使用单个空格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句