我的正则表达式返回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:®exerror];
NSRange range = [regex rangeOfFirstMatchInString:example1
options:0
range:NSMakeRange(0, [example1 length])];
NSString *final1 = [example1 substringWithRange:range];
HBLogDebug (@"example 1 has become %@", final1);
当我登录final1它总是返回零,我无法弄清楚它是怎么回事错了,我将不胜感激,如果有人能够给我一个手
期望输出是
第一消息:和第二结肠!
首先,您创建了一个正则表达式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)|[^"]*).*$
详细:
-
^
- 启动字符串 -
.*?:
- 任何0+字符直至第一:
后跟与 -
\s+
- 1以上空格... -
(.*?[!.?](?=\s)|[^"]*)
- 第1组捕获任一-
.*?[!.?](?=\s)
- 任何0+字符作为越少越好上升到第!
,那后边带有空格 -
|
.
或?
- 或 - 个
[^"]*
- 零个或多个字符比"
其他
-
-
.*$
- 任何0+字符最多串
所有你需要的是访问组1得到你所需要的值的末尾。看样品Objective-C demo。
我修复了字符串,我记录太多了, 。还没有能够让你的上面的建议工作尚未(可能是因为假设不是我想要的,这是我错误的写错了),如果你可以再看一眼 – user286152
让我首先确保输入正确。 [看起来像这样?](https://regex101.com/r/4X3isB/1) –
是的,看起来完全正确! – user286152
将示例行更改为'NSString * example1 = @“\”@ user hey heres my message:第一条消息:和第二条冒号!哈哈。“”;它应该工作。检查你的引擎是否支持分支重置构造'(?| ..)'如果不是,它不是真的需要,并且可以使它成为一个群集组''。*。“。*?:\ s +(?:(? :(。*?[!。?])\ s +。*?)|(。*?))“。* $'答案只是'$ 1 $ 2'的串联,因为只有一个组可以包含一个字符串。这将保持你现在正在做的修整完整。 – sln
@sln我在那个正则表达式链接中有错误的字符串(当我在这里修正了一个时,我忘了更改它),你能再次检查吗?对不起 – user286152
可能你有心理障碍。正则表达式只会匹配其中有2个双引号的字符串。为了制作一个语言字符串,这些引号必须被转义。 'string var =“”;' – sln