【问题标题】:Regexp to match logcat brief format with g_regex_match_simple正则表达式将 logcat 简要格式与 g_regex_match_simple 匹配
【发布时间】:2014-05-20 15:40:39
【问题描述】:

我正在尝试为各种文本格式的 logcat 日志编写一个 wireshark 解析器。

为此,我需要检测我正在阅读的 logcat 类型,然后提取出值得尊敬的部分。我认为使用正则表达式可以解决问题,但显然它没有。

这是我的正则表达式:

[IVDWE]/.*\(\s*[0-9]*\):\s.*

因为它应该是 Perl 兼容的,所以我从命令行使用 Perl 进行了尝试,它似乎可以工作。然而,当加载一行时,例如。

I/bdAddrLoader(  184): option : f=/persist/bluetooth/.bdaddr

使用g_regex_match_simple,表达式与左圆括号不匹配。我尝试用 1-4 \ 转义它,但没有成功。

编辑: 原来我试过\、'\`和\\\\版本,但不知怎的错过了\\...

【问题讨论】:

  • 不确定g_regex_match_simple 的分隔符如何工作..但是,如果他们使用常见的/ 分隔符,那么您将需要使用\/ 转义/
  • 尝试先用g_regex_new编译正则表达式。
  • @Sam:在我写这部分之前,直到打开圆括号 ([IVDWE]/.*) 工作正常。问题从大括号开口开始......
  • 有趣,抱歉我帮不上忙——没有任何 Android 正则表达式经验。

标签: android regex glib


【解决方案1】:

两个反斜杠对我有用:

#include <glib.h>

int
main(int argc, char *argv[]) {
  gboolean res = g_regex_match_simple ("[IVDWE]/.*\\(\\s*[0-9]*\\):\\s.*",
                                       "I/bdAddrLoader(  184): option : f=/persist/bluetooth/.bdaddr",
                                       0, 0);
  g_message ("%s", res ? "true" : "false");

  return 0;
}

【讨论】:

  • 事实证明,在尝试多个转义时,我一定跳过了双 `\` 版本。很抱歉,感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 2013-01-09
  • 1970-01-01
  • 2020-09-17
相关资源
最近更新 更多