创建解析cli命令输出的正则表达式

问题描述 投票:0回答:2

有一个来自 cli 命令的有效负载,它显示消息以及 json 字符串,如下所示

Provided bot name already exists in Resource Group. Returning bot information:
{
    "name": "TestBot",
    "id": "2306d087-3d65-489b-8cd8-4d1524305110",
    ...
}

有时,它只是简单地发送 json 字符串而没有任何额外的消息

{
    "name": "TestBot",
    "id": "2306d087-3d65-489b-8cd8-4d1524305110",
    ...
}

我需要一个正则表达式来解析消息:

  1. 从头到第一个
    {
    字符(如果存在)。
  2. 否则抓取消息本身。

我目前拥有的正则表达式是

/^(.+?)[{]?/
,它适用于第一种情况,但不适用于第二种情况,因为
{
不存在

提前致谢!

使用

{
量词使
?
符号可选没有帮助

php json regex parsing command-line-interface
2个回答
0
投票

你可以试试这个:

^[^{].*(?=\n{)|^{(?:.|\n)+}$

在哪里

  • ^[^{].*(?=\n{)
    匹配变体 1 - 不以
    {
    开头的单行文本,但后跟以
    {
  • 开头的第二行
  • ^{(?:.|\n)+}$
    匹配变体 2 - 多行,以
    {
    开始并以
    }
  • 结束

请注意,不会检查这是否是正确的 JSON,左括号和右括号的数量是否匹配等。此外,如果您有可用的标志,则必须注意不要选择“多行”匹配,因为这会给你多场比赛。


-1
投票

只需更改为:

/^.(.+?)(\{|$)/s
© www.soinside.com 2019 - 2024. All rights reserved.