iOS 正则表达式:未知转义序列“\|”

Posted

技术标签:

【中文标题】iOS 正则表达式:未知转义序列“\\|”【英文标题】:iOS Regex: Unknown escape sequence "\|"iOS 正则表达式:未知转义序列“\|” 【发布时间】:2012-07-11 15:05:23 【问题描述】:

我收到一个奇怪的警告,因此我的正则表达式搜索不起作用。这是行:

NSRange r = [html rangeOfString:@"\|(.*)\|" options:NSRegularExpressionSearch];

HTML 是一个字符串,我确信它包含上述正则表达式的单个匹配项。

警告只在第一次出现“\|”时出现,而不是同时出现。

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

加起来,如果你正在处理 unicode 格式的特殊字符序列,你可以使用这样的东西:

const unichar specialCharSequence='some special character';
if(specialCharSequence==L'\uxxxx')

   //handle the occurence of this special character

【讨论】:

【参考方案2】:

您收到警告是因为 \| 在 Objective-C(或 C 或 C++)中不是有效的转义序列。编译器忽略了这一点,只使用了一个原始的| 字符,所以你实际传入的字符串是@"|(.*)|"

要获得您想要的行为,您必须在源代码中转义反斜杠,以便正则表达式引擎看到文字反斜杠并将 | 字符解释为文字而不是交替,例如@"\\|(.*)\\|".

【讨论】:

跟进问题:假设我将其与“|adsfsad| asdfsadf |”之类的字符串匹配我只想捕获第一个(“|asdfsad|”)而不是匹配整个字符串,我该如何指定? 您可以使用“\\|(.*?)\\|”抓住第一个 ("|asdfsad|")

以上是关于iOS 正则表达式:未知转义序列“\|”的主要内容,如果未能解决你的问题,请参考以下文章

刨根究底正则表达式之二——正则表达式基础

正则表达式仅匹配未转义的特殊字符

正则表达式如何匹配+号?

正则表达式

正则表达式

正则表达式