Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
can';似乎找不到正确的php正则表达式量词_Php_Regex_Preg Match - Fatal编程技术网

can';似乎找不到正确的php正则表达式量词

can';似乎找不到正确的php正则表达式量词,php,regex,preg-match,Php,Regex,Preg Match,我有一个字符串如下所示: msg": "log domain jl.lab.test.net server lab-jl-ppr-web" 我正在尝试使用以下正则表达式从“lab jl ppr web”中提取“jl.lab.test.net”和“lab jl ppr”: preg_match("/\"msg\"\: \"log domain\s([\w*\.]*) server ([\w*\.\-]*)/i",$line,$matches); 第二组当前匹配整个“lab jl ppr we

我有一个字符串如下所示:

msg": "log domain jl.lab.test.net server lab-jl-ppr-web"
我正在尝试使用以下正则表达式从“lab jl ppr web”中提取“jl.lab.test.net”和“lab jl ppr”:

 preg_match("/\"msg\"\: \"log domain\s([\w*\.]*) server ([\w*\.\-]*)/i",$line,$matches);
第二组当前匹配整个“lab jl ppr web”字符串。我一直在尝试指定适当的量词,但到目前为止,我还没有得到正确的一个。我尝试了以下方法:

 preg_match("/\"msg\"\: \"log domain\s([\w*\.]*) server ([\w*\.\-]*){3}/i",$line,$matches);
我会继续玩它,但如果你有任何建议,我会很感激。 谢谢。

为什么不

/..snip.. server ([\w*\.\-]*)-web/i
??只需将
-web
置于捕获组之外。

为什么不

/..snip.. server ([\w*\.\-]*)-web/i

??只要把
-web
放在捕获组之外就行了。

这似乎是合法的,但我相信可以写得更好

^log domain ([a-zA-Z\.]+) server ([a-zA-Z\.\-]+)-web$
在这里你可以测试它


这一条似乎是合法的,但我相信可以写出更好的一条

^log domain ([a-zA-Z\.]+) server ([a-zA-Z\.\-]+)-web$
在这里你可以测试它


使用以下方法,使用
preg\u match\u all
功能:

$str = "log domain jl.lab.test.net server lab-jl-ppr-web";
preg_match_all("/\b\w+\.\w+\.\w+\.\w+\b|\b\w+-\w+-\w+(?=-\w+?)\b/U", $str, $matches);

print_r($matches[0]);
输出:

Array
(
    [0] => jl.lab.test.net
    [1] => lab-jl-ppr
)

preg\u match\u all
功能使用以下方法:

$str = "log domain jl.lab.test.net server lab-jl-ppr-web";
preg_match_all("/\b\w+\.\w+\.\w+\.\w+\b|\b\w+-\w+-\w+(?=-\w+?)\b/U", $str, $matches);

print_r($matches[0]);
输出:

Array
(
    [0] => jl.lab.test.net
    [1] => lab-jl-ppr
)
这可能有效

'~"msg":[ ]"log[ ]domain\s([\w.]*)[ ]server[ ]((?:(?!-web)[\w.-])*)~'  
但是,很难从正则表达式中得到你想要的

扩大

 "msg": [ ] "log [ ] domain \s 
 ( [\w.]* )                    # (1)
 [ ] server [ ] 
 (                             # (2 start)
      (?:
           (?! -web )
           [\w.-] 
      )*
 )                             # (2 end)
输出

 **  Grp 0 -  ( pos 0 , len 52 ) 
"msg": "log domain jl.lab.test.net server lab-jl-ppr  
 **  Grp 1 -  ( pos 19 , len 15 ) 
jl.lab.test.net  
 **  Grp 2 -  ( pos 42 , len 10 ) 
lab-jl-ppr  
这可能有效

'~"msg":[ ]"log[ ]domain\s([\w.]*)[ ]server[ ]((?:(?!-web)[\w.-])*)~'  
但是,很难从正则表达式中得到你想要的

扩大

 "msg": [ ] "log [ ] domain \s 
 ( [\w.]* )                    # (1)
 [ ] server [ ] 
 (                             # (2 start)
      (?:
           (?! -web )
           [\w.-] 
      )*
 )                             # (2 end)
输出

 **  Grp 0 -  ( pos 0 , len 52 ) 
"msg": "log domain jl.lab.test.net server lab-jl-ppr  
 **  Grp 1 -  ( pos 19 , len 15 ) 
jl.lab.test.net  
 **  Grp 2 -  ( pos 42 , len 10 ) 
lab-jl-ppr  

请更新您的问题,以包括一些示例,以及您预期的最终输出,您当前使用的措辞使其令人困惑。
[]
匹配单个字符,
[]{3}
将匹配一行中的3个指定字符。它将与3组3个字符不匹配。请更新您的问题,以包括一些示例,以及您预期的最终输出,您当前使用的措辞会使其混淆。
[]
匹配单个字符,
[]{3}
将匹配一行中的3个指定字符。它将不匹配3组3个字符。