iOS Regex: Unknown escape sequence "\|"

13,332

You're getting the warning because \| is not a valid escape sequence in Objective-C (or C or C++ for that matter). The compiler is ignoring that and just using a raw | character instead, so the string you're actually passing in is @"|(.*)|".

To get the behavior you want, you have to escape the backslash in your source code so that the regex engine sees the literal backslash and interprets the | character as a literal instead of as alternation, e.g. @"\\|(.*)\\|".

Share:
13,332

Related videos on Youtube

Mason
Author by

Mason

Updated on September 14, 2022

Comments

  • Mason
    Mason over 1 year

    I'm getting a weird warning, and as a result my regex search isn't working. Here's the line:

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

    Where HTML is a string that I'm sure contains a single match for the above regex.

    The warning is only on the first occurrence of "\|", not on both.

    Any help is much appreciated!

  • Mason
    Mason almost 12 years
    Follow up question: Let's say I was matching that to a string like "|adsfsad| asdfsadf |" and I only want to catch the first one ("|asdfsad|") instead of it matching the entire string, how can I specify that?
  • Wu Zhou
    Wu Zhou almost 11 years
    You can use "\\|(.*?)\\|" to catch the first one ("|asdfsad|")