- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码很小
创建一个新的 XCode 项目并运行此代码:
NSString *stringToCheck = @"## master...origin/master [ahead 1, behind 1]";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[(ahead) (\\d), (behind) (\\d)\\]|\\[(behind) (\\d)\\]|\\[(ahead) (\\d)\\]" options:0 error:nil];
NSArray* matches = [regex matchesInString:stringToCheck options:0 range:NSMakeRange(0, [stringToCheck length])];
NSTextCheckingResult *match = [matches firstObject];
NSUInteger numberOfRanges = [match numberOfRanges];
numberOfRanges
我得到 = 9。但这不应该是 5 吗?
编辑:更多信息数据可以有 3 种形式
1. ## master...origin/master [ahead 1, behind 1]
2. ## master...origin/master [ahead 1]
3. ## master...origin/master [behind 1]
我如何编写代码来考虑所有 3 个场景?在不知道找到哪个匹配项的情况下,我不知道如何继续。根据下面的一个答案,似乎 [match numberOfRanges]
将返回完整的匹配计数,无论是否找到。
如果数据恰好是 #1,则 [match rangeOfIndex:0-4]
方法有效。其他索引失败。
如果数据恰好是 #2,则 [match rangeOfIndex:5-6]
方法有效。其他人失败
如果数据恰好是 #3,则 [match rangeOfIndex:7-8]
方法有效。其他人则失败了。
那么我如何判断哪个组被捕获,以便我知道要搜索哪个范围?
编辑:根据给出的响应进行回答
if ([match rangeAtIndex:1].location != NSNotFound) { // The First capture group
aheadCount = [stringToCheck substringWithRange:[match rangeAtIndex:2]];
behindCount = [stringToCheck substringWithRange:[match rangeAtIndex:4]];
} else if ([match rangeAtIndex:5].location != NSNotFound) { //The second Capture group
aheadCount = [stringToCheck substringWithRange:[match rangeAtIndex:6]];
} else if ([match rangeAtIndex:7].location != NSNotFound) { //The third capture group
behindCount = [stringToCheck substringWithRange:[match rangeAtIndex:8]];
}
最佳答案
模式中的每个组 (...)
都会产生一个匹配范围,整个模式(索引为 0)也会产生匹配范围 - 总共为 9。使用 or ,|
,不会改变这一点,因此编号保持一致 - 每个组都有一个唯一的编号。
在您的示例中,如果您检查所有范围,您会发现对于匹配 5 到 8,NSRange
location
值是 NSNotFound
作为您的字符串与包含组 1 到 4 的第一个替代项匹配。
注意:由于每个组都有唯一的编号,通过测试 NSNotFound
您可以确定哪个替代项已匹配。
关于objective-c - NSRegularExpression 从 numberOfRanges 方法给出了错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31891627/
我有一个像这样的字符串: ?key=123%252Bf-34Fa&name=John ?name=Johon&key=123%252Bf-34Fa 我想获取key的值,我使用此NSRegularExp
我曾使用 NSScanner 从下面的文本中检索数字。但有时结果并不像预期的那样。听说 iOS 4 可用的 NSRegularExpression 类更适合做这种类型的提取。由于我是 NSRegula
全部, 我有一本包含两个键和值的字典。我需要从它们中提取一些片段并将它们放入单独的字符串中。 { IP = "192.168.17.1"; desc = "VUWI-V
我想用 iPhone 的 NSRegularExpression 类解析此文本: Uploaded652.81 GB 用于摘录上传和652.81文本。 最佳答案 虽然我确实认为 xml 解析器更适合解
嗨,我遇到了问题,如果字符串中没有电话号码,并且 NSRegularExpression 找不到任何内容,则应用程序崩溃,但当它确实找到电话号码时,它在字符串中工作正常,没有任何问题。我怎样才能阻止它
我的代码看起来像 NSString *pattern = @"\\w+(\\w)"; NSRegularExpression *regex = [NSRegularExpression
我在理解使用 NSRegularExpression 获取捕获组时遇到了一些问题 let string = "QWERTY123 ASDFGH" let nsString = string as NS
我有一个正在 UIWebView 中显示的 HTML 字符串。有一些希腊文本,Unicode 范围 U+0370–U+03FF,我想通过将其括在跨度中以不同的字体显示。我可以搜索\p{script=G
我正在尝试更改字符的颜色和任何文本,我正在使用 NSRegularExpression 来获取字符,但我不知道如何更改以下字符,例如这是我的文本: ● Title...... some descrip
我正在编写一个通过 TCP 接收消息 block 的应用程序。消息 block 由以下部分组成: 固定 header <<:--!! 给出消息长度的 6 位数字 消息本身 使用 NSRegularEx
我知道 NSBackwardSearch 用于向后搜索字符串。 我的问题是,我可以通过 NSRegularExpression 进行相同的反向搜索吗? 如果是,请分享您的知识? 最佳答案 NSRegu
我想将 stringWithHashtags 中的每个单词添加到以 @ 和 # 开头的 attString 中.我认为最简单的方法是合并两个 NSRegularExpression 然后将其分配给数组
所以我正在开发一个 iPhone 应用程序,它拍摄一些文本的图片,图片经过 OCR 处理并发回给我,然后我使用正则表达式在字符串中搜索 double 值,最多可达xxxx.xx。 NSRegularE
我必须在 iOS 应用程序上动态替换 HTML 文件。 这与本地化有关。 在 HTML 文件中,我有类似这样的内容:LANG(183) 必须将其转换为“本地化字符串” 我正在查看 stringByre
我想使用NSRegularExpression获取html中的所有下载链接。 例如html内容是这样的: text info 我想得到这样的所有字符串: href="http://xxxx.com/f
我想让 TextView 中的匹配项为蓝色。 NSString *text = @"Except as contained in #wep this notice, the name of a cop
我使用 NSRegularExpression 来查找与特定模式匹配的内容,该模式在代码片段中可见: - (NSString *)functionPattern { return @"[A-Z
我正在尝试编写一个函数,它有一个 NSString 并解析它返回一个标签数组。 标签的定义是任何以# 开头并且在# 之后仅包含字母数字字符的 nsstring 文本。 这是正确的吗? #.*?[A-Z
我有以下网址: https://api.instagram.com/v1/tags/picoftheday/media/recent?access_token=29088696%2Efd3325f%2
您好,我在 NSRegularExpressions 中使用正则表达式的非捕获组功能时遇到问题 下面是一些捕获匹配的代码: func matches(for regex: String, in tex
我是一名优秀的程序员,十分优秀!