views:

128

answers:

2

What is equivalent to perl expression: /ing$|ed$|en$/ in boost regular expression? Words end with ing or ed or en should match with reg expression in boost!

+1  A: 

The most important difference is that regexps in C++ are strings so all regexp specific backslash sequences (such as \w and \d should be double quoted ("\\w" and "\\d")

Leon Timmermans
What about this perl expression: '/ O$/' What is the meaning of $ in end of perl expression?Another question is: When I write for example expression "^B_" in boost, what will mean?
Yadollah
+2  A: 
/^[\.:\,()\'\`-]/

should become

"^[.:,()'`-]"

The special Perl regex delimiter / doesn't exist in C++, so regexes are just a string. In those strings, you need to take care to escape backslashes correctly (\\ for every \ in your original regex). In your example, though, all those backslashes were unnecessary, so I dropped them completely.

There are other caveats; some Perl features (like variable-length lookbehind) don't exist in the Boost library, as far as I know. So it might not be possible to simply translate any regex. Your examples should be fine, though. Although some of them are weird. .*[0-9].* will match any string that contains a number somewhere, not all numbers.

Tim Pietzcker
The escape isn't need inside character classes (`[...]`) in Perl, either.
mobrule
Right. They were unnecessary to begin with. In some cases, unnecessary backslashes can even become syntax errors (`\<` for example).
Tim Pietzcker