Project

General

Profile

Regex » History » Revision 2

Revision 1 (Yingdi Yu, 03/18/2014 10:56 PM) → Revision 2/7 (Yingdi Yu, 03/19/2014 11:19 AM)

# NDN Regular Expression 

 NDN regular expression matching is done at two levels: one at the name level and one at the name component level. 

 We use `<` and `>` to enclose a name component matcher which specifies the pattern of a name component. 
 The component pattern is expressed using the [Perl Regular Expression Syntax](http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html). 
 For example, `<ab*c>` can match the 1st, 3rd, and 4th components of `"/ac/dc/abc/abbc"`, but it cannot match the 2nd component. 
 A special case is that `<>` is a wildcard matcher that can match **ANY** component. 

 Note that a component match can match only one name component. 
 In order to match a name, you need to specify the pattern of a name based on the name component matchers. 
 For example, `<ndn><edu><ucla>` can match the name `"/ndn/edu/ucla"`. 
 In order to describe a more complicated name pattern, we borrow some syntaxes from the standard regular expressions. 

 ## NDN Regex Syntax 

 ### Anchors 

 A '^' character shall match the start of a name. 
 For example, `^<ndn>` shall match any names starting with a component `"ndn"`, and it will exclude a name like `"/local/broadcast"`. 

 A '$' character shall match the end of a name. 
 For example, `^<ndn><edu>$` shall match only one name: `"/ndn/edu"`.  


 A NDN regular expression is built on the component matcher extended from the standard regex by simply treating a component matcher as a single character in standard regex. 
 For example,  
 `^<ndn>` can match any names starting with a component `"ndn"`;  
 `<test>$` can match any names ending with a component `"test"`; 
 `^[^<ndn>]` can match any names that do not start with a component `"ndn"`; 
 `^([^<DNS>])<DNS>(<>*)<NS>` can match a NDN DNS data name, and you can use back reference to extract the part enclosed by `(` and `)` 
 (`"\1\2"` can extract `/ndn/edu/ucla/irl` from `/ndn/edu/ucla/DNS/irl/NS/123456`.