regex - Objective-c NSRegularExpression strange match -


my nsstring pattern doesn't work well.

nsstring *pattern = @"/api/v1/news/([0-9]+)/\\?categoryid=([0-9]+)"; nsstring *string = urlstring; nsregularexpression *regex = [nsregularexpression                               regularexpressionwithpattern:pattern                               options:nsregularexpressioncaseinsensitive                               error:nil]; 

why matches following string?

/api/v1/news/123/?categoryid=22abc 

i want match only

/api/v1/news/123/?categoryid=22 

where 123 , 22 can variable number.

your regex fine, allows partial matches. disallow them, use ^ , $ anchors:

^/api/v1/news/([0-9]+)/\\?categoryid=([0-9]+)$ ^                                            ^ 

see regex demo

the ^ asserts position @ beginning of string, , $ asserts position @ end of string.

see ideone demo showing no match first input string have, , this demo matching second one.

if need match strings separate words, use \\b (word boundary) @ end , (?<!\\w) look-behind (making sure there no word character before) @ beginning:

(?<!\\w)/api/v1/news/([0-9]+)/\\?categoryid=([0-9]+)\\b ^^^^^^^^                                             ^^ 

if need access captured texts, too, use like:

nsstring *pattern = @"^/api/v1/news/([0-9]+)/\\?categoryid=([0-9]+)$"; nsstring *string = @"/api/v1/news/123/?categoryid=22"; nserror *error = nil; nsregularexpression *regex = [nsregularexpression regularexpressionwithpattern:pattern options:0 error:&error]; nstextcheckingresult *match = [regex firstmatchinstring:string                              options:0                              range:nsmakerange(0, string.length)]; nslog(@"group 1 number: %@", [string substringwithrange:[match rangeatindex:1]]); nslog(@"group 2 number: %@", [string substringwithrange:[match rangeatindex:2]]); 

see ideone demo, output is

group 1 number: 123 group 2 number: 22 

Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -