【问题标题】:POSIX Regex notation to start and end with @ and Regex notation to have alphanumeric chars but Must contain an _POSIX 正则表达式符号以 @ 开头和结尾,正则表达式符号具有字母数字字符,但必须包含 _
【发布时间】:2023-03-15 17:08:01
【问题描述】:

我目前将 regex.h 用于 c 程序

希望确保字符串以围绕字母数字字符的 @ 开头和结尾,(中间只有 2 个 @ 没有)

更新:我想我通过使用 ^ 和 $ 锚标记解决了第一个问题。如果这看起来不是解决问题的正确方法,请告诉我。

我现在的代码:

(regexCheck(tag, "^[@]+[A-Za-z0-9]+[@]$") == 1)

此外,我想确保字符串包含带有字母数字字符的 _(例如 _test、te_st、test_ 都有效,但 test 无效)

我现在的代码:

(regexCheck(string, "[A-Za-z0-9_]")) == 1

如有任何帮助,我们将不胜感激,但也希望能提供正则表达式语法的解释。

【问题讨论】:

  • 我不记得不同正则表达式风格之间的差异,但你试过^@[a-zA-z0-9]+_[a-zA-Z0-9]+$吗?
  • 中间需要多少个 alpha? @_@ 是一个有效的字符串吗?
  • 是的 @_@ 是一个有效的字符串...但我想我用 (regexCheck(tag, "^[@]+[A-Za-z0- 9]+[@]$") == 1)
  • 每个问题只问一个问题。如果有一些让您感到困惑的一般概念(例如“我如何确保正则表达式匹配整个字符串?”),那么这是一个更好的问题。
  • 第一个正则表达式看起来会不必要地匹配@@a@@ab@ 并且会无意地不匹配@a_b@。如果我正确理解您的目标,您想解决所有这些问题,对吗?我有一个可以修复它们的解决方案,但它也可以匹配@_@,可以吗?您的问题也可以被解读为要求 @ 至少一个字母数字之间的任何位置。 IE。它应该匹配 @a_@@_b@ 但不匹配 @_@。有必要吗?

标签: c regex expression regular-language qregularexpression


【解决方案1】:

你可以使用

^@[A-Za-z0-9]*_[A-Za-z0-9]*@$

请参阅regex demo。请注意,您应该在编译正则表达式模式时指定REG_EXTENDED 标志,以便$ 可以正确解析为字符串锚的结尾。

模式详情

  • ^ - 字符串开头
  • @ - 一个 @ 字符
  • [A-Za-z0-9]* - 0 个或多个 ASCII 字母、数字
  • _ - 下划线
  • [A-Za-z0-9]* - 0 个或多个 ASCII 字母、数字
  • @ - 一个 @ 字符
  • $ - 字符串锚点结束。

【讨论】:

  • 这需要并允许使用单个下划线。也许OP还需要看看如何允许重复的下划线? ^@[A-Za-z0-9](_[A-Za-z0-9]*)+$
猜你喜欢
  • 2013-08-04
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-07
  • 2015-10-29
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多