我的正则表达式返回nil每次在obj-c,包含示例代码

问题描述:

编辑我澄清了什么文本即时通讯存储在一个字符串。我的正则表达式返回nil每次在obj-c,包含示例代码

因此,继承人我正则表达式https://regex101.com/r/fWFRya/5 - 这有错弦ZZ,这就是为什么每个人都被搞糊涂了我的错误是固定的,现在再看到

^.*?".*?:\s+(?|(?:(.*?[!.?])\s+.*?)|(.*?))".*$ 

其继承人的样子在我的代码,添加反斜杠逃脱引用

NSString *regexTweet = @"^.*?\".*?:\\s+(?|(?:(.*?[!.?])\\s+.*?)|(.*?))\".*$"; 
//the example string contains the text> @user hey heres my message: first message: and a second colon! haha. 
     NSString *example1 = @"@user hey heres my message: first message: and a second colon! haha."; 
    NSError *regexerror = nil; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexTweet options:NSRegularExpressionCaseInsensitive error:&regexerror]; 

    NSRange range = [regex rangeOfFirstMatchInString:example1 
    options:0 
    range:NSMakeRange(0, [example1 length])]; 
    NSString *final1 = [example1 substringWithRange:range]; 
    HBLogDebug (@"example 1 has become %@", final1); 

当我登录final1它总是返回零,我无法弄清楚它是怎么回事错了,我将不胜感激,如果有人能够给我一个手

期望输出是

第一消息:和第二结肠!

+0

将示例行更改为'NSString * example1 = @“\”@ user hey heres my message:第一条消息:和第二条冒号!哈哈。“”;它应该工作。检查你的引擎是否支持分支重置构造'(?| ..)'如果不是,它不是真的需要,并且可以使它成为一个群集组''。*。“。*?:\ s +(?:(? :(。*?[!。?])\ s +。*?)|(。*?))“。* $'答案只是'$ 1 $ 2'的串联,因为只有一个组可以包含一个字符串。这将保持你现在正在做的修整完整。 – sln

+0

@sln我在那个正则表达式链接中有错误的字符串(当我在这里修正了一个时,我忘了更改它),你能再次检查吗?对不起 – user286152

+1

可能你有心理障碍。正则表达式只会匹配其中有2个双引号的字符串。为了制作一个语言字符串,这些引号必须被转义。 'string var =“”;' – sln

首先,您创建了一个正则表达式NSString *example1 = @("@user hey heres my message: first message: and a second colon! haha");,但你传递给正则表达式引擎中的代码串是@user hey heres my message: first message: and a second colon! haha

我假设你需要匹配一个字符串,如Text.. "@user hey heres my message: first message: and a second colon! haha"。请注意,ICU regex library不支持Branch Reset Groups

我建议改变分支复位组到捕获组与交替组:

^.*?:\s+(.*?[!.?](?=\s)|[^"]*).*$ 

regex demo

详细

  • ^ - 启动字符串
  • .*?: - 任何0+字符直至第一:后跟与
  • \s+ - 1以上空格...
  • (.*?[!.?](?=\s)|[^"]*) - 第1组捕获任一
    • .*?[!.?](?=\s) - 任何0+字符作为越少越好上升到第!,那后边带有空格
    • |.? - 或
    • [^"]* - 零个或多个字符比"其他
  • .*$ - 任何0+字符最多串

所有你需要的是访问组1得到你所需要的值的末尾。看样品Objective-C demo

+0

我修复了字符串,我记录太多了, 。还没有能够让你的上面的建议工作尚未(可能是因为假设不是我想要的,这是我错误的写错了),如果你可以再看一眼 – user286152

+1

让我首先确保输入正确。 [看起来像这样?](https://regex101.com/r/4X3isB/1) –

+0

是的,看起来完全正确! – user286152