【发布时间】:2019-08-12 18:58:23
【问题描述】:
我有这段文字:
156.48.459.20 - - [11/Aug/2019
156.48.459.20 - - [11/Aug/2019
235.145.41.12 - - [11/Aug/2019
235.145.41.12 - - [11/Aug/2019
66.23.114.251 - - [11/Aug/2019
我想匹配当天的所有行,所以我做了这个简单的正则表达式'/.*11\/Aug\/2019.*'。
你可以看到文本中有两个重复的 IP,我不想匹配重复的行,所以我搜索了一下,我发现了这个正则表达式:(.).*\1DEMO 虽然这个正则表达式有点奇怪我试图在我当前的正则表达式中应用它,所以我做了:(.*11\/Aug\/2019.*)\1,它没有用。有人可以帮忙吗?
这是我想要的结果:
156.48.459.20 - - [11/Aug/2019
235.145.41.12 - - [11/Aug/2019
66.23.114.251 - - [11/Aug/2019
注意:我正在使用函数preg_match_all():
preg_match_all('/(.*11\/Aug\/2019.*)\1/', $input_lines, $output_array);
【问题讨论】:
-
为什么不简单地将array_unique() 应用于您现在得到的结果? preg_match_all ensure distinct/unique results 的可能重复项。正则表达式有时很有用,但它们不是灵丹妙药。始终尝试首先找到更好的可读性解决方案。
-
也许更容易php.net/manual/en/function.array-unique.php 如果很容易进入数组,
preg_grep也会更容易..
标签: php regex pcre preg-match-all