Objective c 使用ICU Regex/regexkitlite发布Regex

Objective c 使用ICU Regex/regexkitlite发布Regex,objective-c,regex,regexkitlite,Objective C,Regex,Regexkitlite,开始一个新问题,就像我的另一个问题解决了regex的另一个问题一样 这是我的正则表达式: (?i)\\d{1,4}(?) 为清晰起见,将正则表达式拆分: (?i)-不区分大小写 \\d{1,4}-一个有1-4位数字的数字 (?数字前面不能有'v','v','vol','vol',结尾不能有空格 (?![^\\(]*\\)-数字不能在括号内 除了“vol.”位之外,其他都可以工作: @“单词342单词(2342)(单词2单词)(单词)。分机”结果342-正确 @“单词-单词(2010)(单词2)(

开始一个新问题,就像我的另一个问题解决了regex的另一个问题一样

这是我的正则表达式:

(?i)\\d{1,4}(?)

为清晰起见,将正则表达式拆分:

(?i)
-不区分大小写

\\d{1,4}
-一个有1-4位数字的数字

(?数字前面不能有'v','v','vol','vol',结尾不能有空格

(?![^\\(]*\\)
-数字不能在括号内

除了“vol.”位之外,其他都可以工作:

@“单词342单词(2342)(单词2单词)(单词)。分机”
结果342-正确

@“单词-单词(2010)(单词2)(单词).ext”
结果无-正确

@“words v34 35.ext”
结果34-不正确

@“单词卷342 343(1234)(3个单词)(描述).ext”
结果342-不正确


我的“vol.”部分有什么问题?

您需要将lookback放在数字之前。此外,您需要在lookback中添加数字作为非法字符,否则
v.34
中的
4
将匹配。请尝试

(?i)(?<!v(?:ol)?\\.?\\s*\\d*)\\d{1,4}(?![^(]*\\))

恐怕不行。另外,在我提出的最后一个问题上,有人说lookbehinds应该放在数字之后。现在我不知道该怎么想!好吧,lookbehind断言从字符串中的当前位置向后看,所以如果你把它放在数字之后,它会查看数字,发现它不是
vol.
或类似的东西。这个正则表达式在RegexBuddy中工作;但很可能是regexkitlite不支持lookbehind断言中的无限重复,甚至不支持变量重复(如果它支持它们的话,一些像JavaScript这样的语言不知道lookbehind…).我只是看了一下,根据我在那里发现的,第二个正则表达式应该可以工作。哦!我刚刚意识到我忘记避开反斜杠了!将进行编辑。
(?I)(?是最终的正则表达式-但它仍然失败。如果我向前看,它会选择非“vol.”填充正确。如果我去掉后面的外观,不在括号内的部分就起作用了。愤怒起来了!@Nick:噢,该死。我想我发现了另一个问题。昨天我编辑我的答案时,已经很晚了,所以我忽略了前面的未替换反斜杠。不过,你不必在字符类中跳过括号。所以现在我已经(希望)通过再次编辑我的答案完成了正则表达式。很抱歉弄得一团糟。
(?i)(?<!v(?:ol)?\\.?\\s?)(?<!\\d)\\d{1,4}(?![^(]*\\))