【问题标题】:Match strings in C using * as wildcard使用 * 作为通配符匹配 C 中的字符串
【发布时间】:2013-12-26 20:47:25
【问题描述】:

我知道那里的正则表达式实现,包括广泛用于 C 的 POSIX 版本。但是,它并非在任何地方都可用。而且我不需要完整的正则表达式表达能力。

所以我一直在寻找一种使用单个通配符“*”匹配单个 C 字符串的简单方法。例如

a*, b*c, *d

其中“*”表示匹配任意数量的字符。

【问题讨论】:

  • 在大多数 UNIX 风格的平台上都可以找到类似 fnmatch 的东西,周围有类似的原生 Windows 替代品可能会起作用。

标签: c regex wildcard


【解决方案1】:

您想查看 glob(3) 和可能的 fnmatch(3) 而不是使用 POSIX 正则表达式。

否则,只需转义所有需要在 RE 中转义的字符(例如 .)并将 * 转换为 .* 并根据需要添加 ^$(并更改 ^.* 和 @ 987654329@ 插入空字符串)。

【讨论】:

  • int fnmatch(const char *pattern, const char *string, int flags);几乎正是我所需要的。虽然不保证随处可用,但足够接近。
【解决方案2】:

我认为其中许多正则表达式实现都是开源的,因此您可能可以从中获得一些想法。

正如你所拥有的那样,我认为你可以使用 strchr 和/或 strstr 轻松构建一些东西,但它们不一定是“正确的”正则表达式,因为它们不会是贪婪的(例如匹配 b*c 反对bacac 会找到第一个 c 而不是第二个)。根据您的需要,这可能就足够了。

【讨论】:

  • 我会冒险猜测,浏览源代码以获取完整的正则表达式实现不会是一项富有成效的练习。
猜你喜欢
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
相关资源
最近更新 更多