- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找到一个正则表达式来解析以下内容:
d=4,b=5,o=63
(?:(d)=(1|2|4|8|16|32))|(?:(o)=(5|6|7|8))
2012-01-20 11:01:56.027 TestRegex[95678:f803] -------------------------------
2012-01-20 11:01:56.027 TestRegex[95678:f803] Number of matches: 2
2012-01-20 11:01:56.028 TestRegex[95678:f803] Number of ranges = 5
2012-01-20 11:01:56.029 TestRegex[95678:f803] Range 0: 0 3 | d=4
2012-01-20 11:01:56.030 TestRegex[95678:f803] Range 1: 0 1 | d
2012-01-20 11:01:56.030 TestRegex[95678:f803] Range 2: 2 1 | 4
2012-01-20 11:01:56.031 TestRegex[95678:f803] Range 3: 2147483647 0 | <outside range>
2012-01-20 11:01:56.032 TestRegex[95678:f803] Range 4: 2147483647 0 | <outside range>
2012-01-20 11:01:56.032 TestRegex[95678:f803] Number of ranges = 5
2012-01-20 11:01:56.033 TestRegex[95678:f803] Range 0: 4 3 | o=5
2012-01-20 11:01:56.034 TestRegex[95678:f803] Range 1: 2147483647 0 | <outside range>
2012-01-20 11:01:56.035 TestRegex[95678:f803] Range 2: 2147483647 0 | <outside range>
2012-01-20 11:01:56.036 TestRegex[95678:f803] Range 3: 4 1 | o
2012-01-20 11:01:56.037 TestRegex[95678:f803] Range 4: 6 1 | 5
NSString *pat = regexTextField.text;
NSString *str = stringTextField.text;
NSError *err;
NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:pat
options:NSRegularExpressionCaseInsensitive
error:&err];
NSLog(@"-------------------------------");
if (err != nil) {
NSLog(@"Error: %@", err.localizedDescription);
NSLog(@"Error: %@", err.localizedFailureReason);
NSLog(@"Error: %@", err.localizedRecoverySuggestion);
return;
}
NSUInteger n = [re numberOfMatchesInString:str
options:0
range:NSMakeRange(0, str.length)];
NSLog(@"Number of matches: %u", n);
NSArray *matches = [re matchesInString:str
options:0
range:NSMakeRange(0, str.length)];
for (NSTextCheckingResult *match in matches) {
NSLog(@"Number of ranges = %d", match.numberOfRanges);
for (int c = 0; c < match.numberOfRanges; ++c) {
NSRange range = [match rangeAtIndex:c];
NSString *matchStr;
if (range.location >= str.length) {
matchStr = @"<outside range>";
} else {
matchStr = [str substringWithRange:range];
}
NSLog(@"Range %2d: %2d %2d | %@", c, range.location, range.length, matchStr);
}
}
最佳答案
你可以试试这个正则表达式:([a-z])=([0-9]+)
.它匹配一个字母,后跟一个等号,然后是一个数字。两个捕获组来存储值。
获取所有匹配项,然后在第一个匹配组中,您得到字母,在第二个匹配组中得到数字。
因此,您拥有的正则表达式肯定很复杂,但不,实现有效。-(NSRange)rangeAtIndex:(NSUInteger)index;
给定 0
时返回整个匹配范围,捕获组的范围如下。在下面的示例中,您将获得范围为索引 1
的字母和索引处的数字 2
.
NSString *str = stringTextField.text;
NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:@"([a-z])=([0-9]+)"
options:NSRegularExpressionCaseInsensitive
error:&err];
NSArray *matches = [re matchesInString:str
options:0
range:NSMakeRange(0, str.length)];
for(NSTextCheckingResult *match in matches) {
NSRange capture1 = [match rangeAtIndex:1]; // first capture group
NSRange capture2 = [match rangeAtIndex:2]; // second one
NSString *letter = [str substringWithRange:capture1];
NSInteger number = [[str substringWithRange:capture2] integerValue];
// ...
}
(d)
、
([1248]|16|32)
、
(o)
、
([5678])
),分别从索引 1 到4. 必须以不同方式处理范围,以便第二次匹配
o=6
,捕获组范围索引现在是
3
和
4
.这可以通过测试范围的
location
来完成。反对
NSNotFound
.
NSString *str = @"d=4,b=5,o=63";
NSRegularExpression *re = [NSRegularExpression
regularExpressionWithPattern:@"(?:(d)=([1248]|16|32))|(?:(o)=([5678]))"
// ^ ^ ^ ^
// 1 2 3 4
options:NSRegularExpressionAllowCommentsAndWhitespace
error:NULL];
NSArray *matches = [re matchesInString:str
options:0
range:NSMakeRange(0, str.length)];
NSLog(@"Number of matches : %lu", [matches count]);
for(NSTextCheckingResult *match in matches) {
NSLog(@"Number of ranges : %lu", match.numberOfRanges);
NSLog(@"Globally matched from %lu, length = %lu", match.range.location, match.range.length);
NSUInteger i = 1;
NSRange capture1 = [match rangeAtIndex:i];
NSRange capture2 = [match rangeAtIndex:i+1];
while(capture1.location == NSNotFound) {
i += 2;
capture1 = [match rangeAtIndex:i];
capture2 = [match rangeAtIndex:i+1];
}
NSLog(@"Matched from %lu, length = %lu", capture1.location, capture1.length);
NSLog(@"Matched from %lu, length = %lu", capture2.location, capture2.length);
NSString *letter = [str substringWithRange:capture1];
NSInteger number = [[str substringWithRange:capture2] integerValue];
NSLog(@"%@ = %ld", letter, number);
}
2012-01-21 17:04:02.845 TestApp[3481:707] Number of matches : 2
2012-01-21 17:04:02.846 TestApp[3481:707] Number of ranges : 5
2012-01-21 17:04:02.846 TestApp[3481:707] Globally matched from 0, length = 3
2012-01-21 17:04:02.847 TestApp[3481:707] Matched from 0, length = 1
2012-01-21 17:04:02.847 TestApp[3481:707] Matched from 2, length = 1
2012-01-21 17:04:02.848 TestApp[3481:707] d = 4
2012-01-21 17:04:02.848 TestApp[3481:707] Number of ranges : 5
2012-01-21 17:04:02.848 TestApp[3481:707] Globally matched from 8, length = 3
2012-01-21 17:04:02.849 TestApp[3481:707] Matched from 8, length = 1
2012-01-21 17:04:02.849 TestApp[3481:707] Matched from 10, length = 1
2012-01-21 17:04:02.850 TestApp[3481:707] o = 6
关于ios - NSRegularExpression : Proper regex for parsing d=4, b=5,o=63?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8946878/
我有两种结构,Header 和Session,它们都符合协议(protocol)TimelineItem。 我有一个 Array 由 TimelineItem 组成,如下所示: [Header1, S
这个问题在这里已经有了答案: Multiple assignment and evaluation order in Python (11 个答案) 关闭 6 年前。 我刚接触python所以想问你
我试图找到一种方法来在 R 中获取 A、A、A、A、B、B、B、B、B 的所有可能的唯一排列的列表。 组合最初被认为是获得解决方案的方法,因此组合的答案。 最佳答案 我认为这就是你所追求的。 @bil
我怎样才能将两个给定的向量混合成一个新的向量,它以交替的顺序保存它们的值。 (f [a a] [b b]) ; > [a b a b] 这是我想到的: (flatten (map vector [:a
这是我的第一个问题,我开始学习Python。之间有区别吗: a, b = b, a + b 和 a = b b = a + b 当您在下面的示例中编写它时,它会显示不同的结果。 def fib(n):
这个问题在这里已经有了答案: Why is there an injected class name? (1 个回答) 12 个月前关闭。 我不知道如何解释: namespace A { struct
我尝试了一些代码来交换 Java 中的两个整数,而不使用第三个变量,使用 XOR。 这是我尝试过的两个交换函数: package lang.numeric; public class SwapVars
假设类 B 扩展类 A,并且我想为 B 声明一个变量。什么更有效?为什么? B b或 A b . 最佳答案 您混淆了两个不同的概念。 class B extends A { } 意味着B 是 A .
我不确定这个问题的标题是什么,这也可能是一个重复的问题。所以请相应地指导。 我是 python 编程的新手。我有这个简单的代码来生成斐波那契数列。 1: def fibo(n): 2: a =
我在谷歌上搜索了有关 dynamic_cast 的内容,我发现显式地将基类对象转换为派生类指针可能是不安全的。但是当我运行一些示例代码来检查它时,我没有收到任何错误。请在下面找到我的代码: class
这个问题在这里已经有了答案: What is this weird colon-member (" : ") syntax in the constructor? (14 个答案) 关闭 8 年前。
在不重现产生非整数值的表达式的情况下实现以下目标的惯用方法是什么(在我的真实情况下,该值是在我不想重现的冗长查询之后计算为百分比的): SELECT * FROM SomeTable WHERE 1/
在析构中,这两个代码的结果确实不同。我不确定为什么。 提示说 const [b,a] = [a,b] 将导致 a,b 的值为 undefined (从左到右的简单分配规则)。我不明白为什么会这样。 l
C++ Templates - The Complete Guide, 2nd Edition介绍max模板: template T max (T a, T b) { // if b < a th
我最近开始学习代码(Java),并根据第 15.17.3 节在 Oracle 网站上查找了模运算符。以下链接: http://docs.oracle.com/javase/specs/jls/se8/
无法理解以下行为。 d1 := &data{1}; 的区别d1 和 d2 := 数据{1}; &d1。两者都是指针,对吧?但他们的行为不同。这里发生了什么 package main import "f
这个问题在这里已经有了答案: How to make loop infinite with "x = y && x != y"? (4 个回答) How can i define variables
在我的程序中,当我调试我的代码时,它似乎在我生成的代码中的某处 X1=['[a,a,a]','[b,b,b]'] 还有我生成的其他地方 X2=[[a,a,a],[b,b,b]] 当我想添加这两个列表然
我试图使用递归将两个整数相乘,并意外编写了这段代码: //the original version int multiply(int a, int b) { if ( !b ) retu
我有一个列表中数字之间所有可能的操作组合: list = ['2','7','8'] 7+8*2 8+7*2 2*8+7 2+8*7 2-8*7 8-2/7 etc 我想知道是否可以说像 ('7*2+
我是一名优秀的程序员,十分优秀!