objective-c - 正则表达式(搜索函数(@"string content")以获取 "string content"

标签 objective-c regex

我有一些正则表达式问题(有时我们不是都这样)。 几段代码来自 Objective C,但我相信正则表达式仍然是相同的。

我有两个函数

NSString * CRLocalizedString(NSString *key)
NSString * CRLocalizedArgString(NSString *key, ...)

这些分散在我的本地化项目中。 现在我想把他们全部找到。 我们将进入目录,解析所有文件等 那里一切都很好。 我在文件上使用的正则表达式是

[NSRegularExpression regularExpressionWithPattern:@"CRLocalizedString\\(@\\\"[^)]+\\\"\\)" options:0 error:&error];
[NSRegularExpression regularExpressionWithPattern:@"CRLocalizedArgString\\([^)]+\\)" options:0 error:&error];

除了我的终止字符是 ) 之外,这很完美。

像这样的函数调用会出现问题

CRLocalizedString(@"Happy =), o so happy =D");
CRLocalizedArgString(@"Filter (%i)", 0.75f);

正则表达式在“Filter (%i”和“Happy =)”处结束字符串。 这就是我的正则表达式知识的终点,我现在不知道该做什么了。 我想用“);”作为结束,但情况并非总是如此。

所以我希望这里有人能帮我了解一些东西(当然也允许使用正则表达式来完成不同的事情)

亲切的问候

萨伦

最佳答案

让我们编写您的第一个正则表达式,而无需额外的 C 转义级别:

CRLocalizedString\(@\"[^)]+\"\)

您不必为正则表达式转义 ",所以让我们去掉那些额外的反斜杠:

CRLocalizedString\(@"[^)]+"\)

因此,您想使用 "[^)]+" 匹配带引号的字符串。但这并不匹配每个带引号的字符串。

什么是带引号的字符串?它是一个 ",后跟任意数量的字符串原子,最后是另一个 "。什么是弦原子?它可以是除 "\ 之外的任何字符, \ 后跟任意字符。因此,这是 a 的正则表达式带引号的字符串:

"([^"\\]|\\.)*"

将其放回您的第一个正则表达式中,我们得到:

CRLocalizedString\(@"([^"\\]|\\.)*"\)

Here's a link to a regex tester demonstrating that regex. 在 Objective-C 字符串中引用它可以得到:

@"CRLocalizedString\\(@\"([^\"\\\\]|\\\\.)*\"\\)"

在一般情况下,不可能编写正则表达式来匹配对 CRLocalizedArgString 的调用,因为此类调用可以采用任意表达式作为参数,而正则表达式无法匹配任意表达式(因为它们可以包含任意级别)嵌套括号,正则表达式无法匹配)。

您可以只希望参数列表中没有括号,并使用此正则表达式:

CRLocalizedArgString\(@"([^"\\]|\\.)*"[^)]*\)

Here's a link to a regex tester demonstrating that regex. 在 Objective-C 字符串中引用它可以得到:

@"CRLocalizedArgString\\(@\"([^\"\\\\]|\\\\.)*\"[^)]*\\)"

关于objective-c - 正则表达式(搜索函数(@"string content")以获取 "string content",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21758516/

相关文章:

ios - 曲线的渐变,用 quartz 2d 绘制

objective-c - 设置值 : Not Getting Called for Textfield Before Enabled State Changes

ios - 如何在 UITextView 中设置文本边距?

java - Google 的 j2objc 可以处理和转换二进制 JAR 文件吗?

javascript - 将类似字符串的数组替换为带有字符替换的数组

php - 字符串的特殊 preg_match

iphone - 自动化 iPhone 应用程序的特定状态

正则表达式 - 只有一个特殊字符

regex - NGINX/带有正则表达式的位置

javascript - 正则表达式的拆分字符串在 javascript 中不能正常工作