tgstation/-tg-station — pull request #5871 by Carn (2014-11-13 06:12:17+00:00)
Title: Interface for using boost::regex in byond.

Regex is a robust text-parsing mini-language. It can perform complex and dynamic searches and return the results in an easy to read format. This implementation also uses Boost's extended formatting syntax which gives you a flexible way to conditionally replace complex strings with only a few lines of code

Source code and license info can be found here: http://code.google.com/p/byond-regex/
Licensed under LGPL.

This uses the perl regex syntax (with some extensions) in non-recursive mode (as recursion has additional overheads).

Information on this syntax can be found here: http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html

There are many introductions to regex on the internet. Here is the one I learned from: http://www.regular-expressions.info/tutorial.html

Note: I have added #define USE_BYGEX in code/_compile_options.dm. Simply comment out the define if you encounter any problems.

Due to byond being unable to communicate with a dll through anything but C-strings, the results are returned to byond in a string similar to those you get with list2params. Since byond uses parameters a lot, its params2list() proc is fairly streamlined, so it's pretty much the fastest way you could do this with byond. This data is then stored in a datum/regex object for easy use. See demo.dm datum/regex/proc/report() for an example.