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个字符。