Include and perform regular expression replacements
This is a hack upon the Include macro.
- regular expression search
- regular expression replace
- Can include URL's containing logged in users name
- Can choose not to include for anonymous users
Regular expressions are very useful when you whish to extract data from and/or change data inside an included page. Username feature is very useful for personalized content.
Note: Using the regular expressions fields is not mandatory and you can still use the other functions as is.
- arg 1: url - http://page.com or wiki:WikiPage. Local files cannot be included, except if the file resides in /tmp/trac_include/ and no slashes are used in the file name. Also accepts wiki:MyPage format.
- arg 2: format. Either "wiki" or "raw", where "wiki" does WikiFormatting.
- arg 3+: "Control arguments". See Control Arguments below.
- arg last: The regular expressions must be the last argument.
Only arg 1 & 2 are required.
Regular expressions are defined as follows:
(Remember to define at least one group by using parenthesis)
You can use several expressions:
'<expression>'/'<replacement>','<expression>'/'<replacement>' And search and capture combined
You can also use capture groups. In Python these are defined as \1,\2 etc, where in for example Perl it is $1,$2.
The result/output of each expression is passed on to the next expression, from left to right.
Control Arguments are defined AFTER the second argument (raw,wiki) and BEFORE the regular expressions. Multiple arguments are seperated by comma. Example:
If defined, replace $USER with username in URL. (NOT in the included text!).
use_vars accepts a sub-argument, used change the case of the username. This is one of:
(note: ucfirst is "uppercase first letter only")
Do not include this page for anonymous users.
NOTE: this is NOT a security feature, as anyone can still read your source code.
Good feature to not include unneseseary information for anon users.
Char or string that seperate returned matches from a search expression.
Use like this:
- match_seperator=Seperate This
- match_seperator="Seperate This"
Disable the use of DOTALL option for regular expression.
pr. default DOTALL is enabled and this make the dot (".") also include linebreaks
Existing bugs and feature requests for RegexIncludeMacro are here.
If you have any issues, create a new ticket.
Feel free to use the comment field in the bottom
Download the zipped source from here.
A simple example. Replace all occurences of the word "Windows" or "windows" with the word "Linux":
The next example shows how to use the Control Argument use_vars to create a personalized start page on the wiki:
In my case, it would include a page from the wiki called "StartPage_dfaerch", and always lowercasing the username. And for anonymous users, it would include "StartPage_anonymous", unless "no_anon" is defined as well.
This example shows the 2 graphs from kernel.org's frontpage. It uses regular-expression search to capture the image-urls. Also, it uses match_seperator to seperate the to found image-urls by [[BR]] to put them on seperate lines.
The last example includes http://www.kernel.org/kdist/finger_banner and wiki-formats the wanted data, and removes the unwanted. Perticulary, I want to only keep the major version information, not patches nor snapshots.
Note how 2 regular expression are used, seperated by ','. The first expression formats the lines I want to keep, the second deletes the rest:
[[RegexInclude(http://www.kernel.org/kdist/finger_banner,wiki,'The latest ([\w.]+) version [^:]+:\s*([a-z0-9.-]+)'/' '''\1''' :: \n ''\2'' ','\nThe[ a-zA-Z0-9.:-]+'/'\n')]]
The result is:
- expressions or replacement-strings cannot contain ',' (that is: tick-comma-tick) since that combination is used for splitting the expressions:
- expressions or replacement-strings cannot contain '/' (that is: tick-slash-tick) since that combination is used for splitting the expression from replacement-string.Halloween Costumes
I hope these two combinations are so unlikely, that the limitation wont cause any trouble.
- url's cannot contain comma. If you need comma, you can URLEncode it. (as such: /file?arg=1,2 becomes /file?arg=1%2c2)
- match_seperator must be in quotes (") if you want to use commas.