php - 正则表达式:将日志消息格式化为 HTML 代码
问题描述
我有一个日志文件。我想将每个日志分成两组,这样我就可以用一些 HTML 标记来包装它们。
[25-Nov-2020 11:49:39 UTC] [Error] some error message.
{"good":"14"}
Stack trace:
#0 /Users/Sites/test/test.php(180)
[25-Nov-2020 11:49:39 UTC] [Info] some info message.
Array(
some message
)
Stack trace:
#0 /Users/Sites/test/test.php(10)
#1 /Users/Sites/test/test.php(40)
#2 /Users/Sites/test/test.php(1500)
最终预期结果
<details>
<summary>[25-Nov-2020 07:24:51 UTC] [Error] some error message.</summary>
<pre>{"good":"14"}
Stack trace:
#0 /Users/Sites/test/test.php(180)</pre>
</details>
<details>
<summary>[25-Nov-2020 07:24:51 UTC] [Info] some info message.</summary>
<pre>Array(
some message
)
Stack trace:
#0 /Users/Sites/test/test.php(10)
#1 /Users/Sites/test/test.php(40)
#2 /Users/Sites/test/test.php(1500)</pre>
</details>
到目前为止,我已经(?(?=\[.* UTC\].*)(\[.*)|(.*))
在这个站点上进行了尝试,但我无法为每个日志获取两个组。我得到了很多组。我想如果我可以将每个日志分成两组,我可以添加必要的标签。
解决方案
您可以使用 2 个捕获组,并匹配方括号之间的 UTC 部分,而无需使用 if 子句或替代。
在更换使用组 1 和组 2。
^(\[[^][]*\hUTC].*)((?:\R(?!\[).*)*)
解释
^
字符串的开始(
捕获组 1\[[^][]*\hUTC].*
匹配[
, thenUTC]
和该行的其余部分
)
关闭组 1(
捕获组 2(?:\R(?!\[).*)*
匹配所有不以开头的行[
)
关闭组 2
推荐阅读
- swift - 如何更改 CVPixelBuffer 数据格式
- c# - 发布传递空模型值以及如何正确删除或修复它?
- javascript - 由于 angulat6 中的撇号符号而无法显示图像
- java - 如何将android库项目转换为fat jar
- node.js - 使用另一台主机中的副本集连接到 mongodb 集群时出错
- google-maps - 使用电子表格中的 API 密钥进行身份验证
- r - 在 R 中运行样本大小不等的两样本 t.test
- android - Kotlin 不理解 ViewModelProviders.of(activity ?: fragment)
- c# - 无法转换类型 func
布尔 - python - Scrapy无法通过xpath找到数据