【发布时间】:2019-11-20 04:21:24
【问题描述】:
我写了一个正则表达式:
(^.*)(\[{1}[0-9]+:[0-9]+:[0-9]+:[0-9]+\]{1}) (\"{1}.+\"{1}) ([0-9]+) ([0-9-]+)
匹配一个字符串,如:
141.243.1.172 [29:23:53:25] "GET /Software.html HTTP/1.0" 200 233
并使用 php preg_match。
当我从字符串中删除例如第一部分 141.243.1.172 时,preg_match 返回我:
array(6
0 => [29:23:53:25] "GET /Software.html HTTP/1.0" 200 233
1 => // correctly empty
2 => [29:23:53:25]
3 => "GET /Software.html HTTP/1.0"
4 => 200
5 => 233
)
索引 1 正确为空的位置。 但是,如果我从字符串 [29:23:53:25] 中删除,我会从 preg_match 中得到一个空数组。我怎样才能得到与上面相同的结果,只让相关索引为空而不是全部?
【问题讨论】:
-
您的正则表达式在最后一种情况下不再匹配,
preg_match()返回您似乎没有检查的0。可选匹配项必须如此标记,但在此之前请解释您对{1}的使用,这是多余的。 -
我用 {1} 指定我只想要一个
-
是的 preg_match 不再匹配,有没有办法制作可选组?
-
Regex optional group的可能重复