0

这是我在 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*。不知道出了什么问题。

4

1 回答 1

1

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

你正在寻找的是

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

在 ObjC 中正确逃脱,它将是

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

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

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

于 2013-01-27T22:12:04.247 回答