Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost.Regex: Iterate over named captures/groups
From: NoRulez (norulez_at_[hidden])
Date: 2012-02-01 07:03:34


Hi,

 

>> You do have one good question here

My question was the following: Is there a way to get a list or whatever of
named captures/groups?

 

Here is an example:

print_captures("a(?<val1>.*)", "abcbah");

 

The expected result should be (or something similar):

 

Expression: "a(?<val1>.*)"

Text: "abcbah"

** Match found **

   Sub-Expressions:

      $0 = "abcbah"

      $1 = "bcbah"

      $+{val1} = "bcbah"

   Captures:

      $0 = { "abcbah" }

      $1 = { "bcbah" }

      $+{val1} = { "bcbah" }

 

But I got:

 

Expression: "a(?<val1>.*)"

Text: "abcbah"

** Match found **

   Sub-Expressions:

      $0 = "abcbah"

      $1 = "bcbah"

   Captures:

      $0 = { "abcbah" }

      $1 = { "bcbah" }

 

Best Regards

 

 

-----Ursprüngliche Nachricht-----
Von: Anthony Foiani [mailto:tkil_at_[hidden]]
Gesendet: Dienstag, 31. Jänner 2012 17:49
An: boost-users_at_[hidden]
Cc: NoRulez
Betreff: Re: [Boost-users] Boost.Regex: Iterate over named captures/groups

 

NoRulez < <mailto:norulez_at_[hidden]> norulez_at_[hidden]> writes:

 

> if I have a regex (e.g.: "^Subject: (Re: |Fw: )*(?<subject>.*)")

>

> I know I can access them with what["subject"] but is there a way to get

> a list or whatever of named captures/groups?

 

What would you expect to see?

 

You asked for a named group "subject", which matches zero or more
characters; as such, it will *always* match (if the whole match

succeeds) but it might be empty.

 

And as for "(Re: |Fw: )*", it will always be submatch 1, and its contents
will most likely be whatever it found on the last time through.

 

You do have one good question here: I don't know how Boost.Regex would
signal that "(Re: |Fw: )*" didn't match at all. (Perl would use undef to
distinguish between that case and the empty string, but C++ doesn't have
that option.)

 

And it looks like the answer is (surprise!) in the documentation

already:

 

 
<http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/captur
es.html#boost_regex.captures.unmatched_sub_expressions>
http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/capture
s.html#boost_regex.captures.unmatched_sub_expressions

   (or: <http://preview.tinyurl.com/846ls72>
http://preview.tinyurl.com/846ls72 )

 

Hope this helps,

t.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net