[pmwiki-devel] preg dot question...
Patrick R. Michaud
pmichaud at pobox.com
Fri Dec 8 08:44:24 CST 2006
On Fri, Dec 08, 2006 at 05:01:53AM -0500, The Editor wrote:
> One other more advanced question. In a markup like [+++ text +++], I
> think I can get it to match, but is there are anyway to tell how many
> plusses there are? As in 3 as opposed to 1 or 4? Also to make sure
> there are the same number of +'s at beginning and end? Or is this
> asking too much of regex?
To make sure there are an equivalent number of plusses on each side:
$x = preg_replace('/\\[(\\++)(.*?)\\1\\]/', ... )
The \1 in the pattern says to match whatever was matched by the
first set of parens. So, if the first set of parens matches
'+++', then the \1 has to also match '+++'.
To obtain the number of characters matched, use /e and the strlen
function in the replacement:
$x = preg_replace('/\\[(\\++)(.*?)\\1\\]/e',
"Function(strlen('$1'), '$2')", ...
PmWiki does this already in several places for its standard
markup (including [+...+] and [-...-]) -- for example, the
markup for generating a !!! heading is
Markup('^!', 'block',
'/^(!{1,6})\\s?(.*)$/e',
"'<:block,1><h'.strlen('$1').PSS('>$2</h').strlen('$1').'>'");
where strlen('$1') becomes the number of exclamation points
that were used in the markup.
Pm
More information about the pmwiki-devel
mailing list