【问题标题】:regex pattern to match string in Objective C正则表达式模式匹配目标 C 中的字符串
【发布时间】:2013-01-11 05:42:39
【问题描述】:

这是我在 Objective C 中创建的正则表达式模式:

^\n?([#]{1,2}$|[*]{1,2}$|[0-9]{1,3}.$)

我要匹配:

  1. 以\n开头或为空
  2. 以 # 或 * 或 . 结尾。
  3. 如果以 .中间会有 1 位或 2 位或 3 位数字
  4. 如果以 # 或 * 结尾,则中间可能还有 1 个 # 或 *

我创建的正则表达式匹配 '\n1#' 这不是我想要的。 谁能帮我纠正这个?这是最快的吗?正则表达式会经常使用,所以我希望它尽可能快。

更新:

这是一个用于测试的示例字符串:

"\n#", "11*1", "1#", "a1.", "111*", "\n1#", "\n11.", "a11.", "1. ", "*1."

1#111* 匹配。不知道出了什么问题。

【问题讨论】:

  • 第 1 项“以 \n 开头或为空”不是没用吗?以 \n 开头的字符串只不过是一个空行。相反,只需在正则表达式的开头使用显式“^”搜索您要查找的字符串。它会稍微简化正则表达式。
  • @SlyRaskal 有道理,谢谢。你知道其余的有什么问题吗?
  • 现在正在研究,不知道我的想法是否可行。
  • 你能发布一些示例字符串来测试吗?
  • 我认为您需要更具体地说明当 # 或 * 结尾时应该出现什么类型的字符。我认为这就是问题所在。是不是不应该有任何数字,但如果它以#或*结尾,它可以是任何其他字符?

标签: objective-c regex pattern-matching nsregularexpression


【解决方案1】:

因为[0-9]{1,3}.,您正在匹配#1111#。您还没有转义 .,并且该组基本上匹配任何 1 到 3 位数字后跟任何字符的序列。

你要找的是

^\n?(#{1,2}|\*{1,2}|[0-9]{1,3}\.)$

在 ObjC 中正确转义,它会是

@"^\n?(#{1,2}|\\*{1,2}|[0-9]{1,3}\\.)$"

如果此正则表达式被大量使用,您可能需要缓存 NSRegularExpression 对象以避免每次都编译它。

Regexpal 对测试正则表达式非常有用。

【讨论】:

  • 我正要自己回答这个问题。我在添加一个 \ 时收到警告。 Objective-C 要求你添加两个 \.谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 2019-03-16
相关资源
最近更新 更多