Objective c 正则表达式模式匹配目标C中的字符串

Objective c 正则表达式模式匹配目标C中的字符串,objective-c,regex,pattern-matching,nsregularexpression,Objective C,Regex,Pattern Matching,Nsregularexpression,下面是我在Objective C中创建的正则表达式模式: ^\n?([#]{1,2}$|[*]{1,2}$|[0-9]{1,3}.$) 我想匹配: 以\n或空开头 以#或*或结尾 如果以结束。中间将有1、2或3位数字 如果以#或*结尾,则中间可能还有1个#或* 我创建的正则表达式与“\n1#”匹配,这不是我想要的。 有人能帮我纠正这个吗?这是最快的吗?正则表达式将经常使用,所以我希望它尽可能快 更新: 以下是用于测试的示例字符串: "\n#", "11*1", "1#", "a1.", "11

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

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

  • 以\n或空开头
  • 以#或*或结尾
  • 如果以结束。中间将有1、2或3位数字
  • 如果以#或*结尾,则中间可能还有1个#或*
  • 我创建的正则表达式与“\n1#”匹配,这不是我想要的。 有人能帮我纠正这个吗?这是最快的吗?正则表达式将经常使用,所以我希望它尽可能快

    更新:

    以下是用于测试的示例字符串:

    "\n#", "11*1", "1#", "a1.", "111*", "\n1#", "\n11.", "a11.", "1. ", "*1."
    
    1
    111*
    匹配。不确定出了什么问题。

    由于
    [0-9]{1,3},您正在匹配
    \1
    111
    。您没有转义
    ,该组基本上匹配任何后跟任何字符的1到3位数字序列

    你要找的是

    ^\n?(#{1,2}|\*{1,2}|[0-9]{1,3}\.)$
    
    在ObjC中正确地逃脱,它将

    @"^\n?(#{1,2}|\\*{1,2}|[0-9]{1,3}\\.)$"
    
    如果经常使用此正则表达式,则可能需要缓存
    NSRegularExpression
    对象,以避免每次编译它


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

    项#1“以\n或空开头”不是没用吗?以\n开头的字符串只不过是一个空行。相反,只需在正则表达式的开头使用显式“^”搜索要查找的字符串。它将简化正则表达式一点。@SlyRaskal有意义,谢谢。你知道其余的有什么问题吗?现在研究一下,不知道我提出的方法是否有效。你能发布一些示例字符串来测试吗?我想你需要更具体地说明当#或*结尾时应该出现什么类型的字符。我想这就是问题所在。是不是不应该有任何数字,但如果以#或*结尾,它可以是任何其他字符?我正要自己回答这个问题。当我添加一个\时,我收到了警告。目标C要求您添加两个\。谢谢