[TxMt] Search and replace matching brackets?
Robin Houston
robin.houston at gmail.com
Sun Sep 2 18:49:20 UTC 2007
Excellent, glad it was helpful.
It really ought to be possible to combine subexpression calls and back
references to do things like matching well-formed XML elements.
Unfortunately this doesn't work with the Onigurama engine, because
subexpression calls mess up back referencing. That's a real shame: it
does work in PCRE.
If you change \k<name> to \g<name> in the code below, then it will
work (but then of course it doesn't check that the closing tag has the
same name as the opening one).
Robin
(?x) # Enable layout and comments
(?<element>
(?<stag>
<
(?<name>
# An XML name begins with a letter, underscore or colon:
[[:alpha:]_:]
# followed by a sequence of NameChars (see the XML definition):
[[:alnum:].\-_:]*
)
(?<attr>
# In XML, the whitespace chars are space, tab, CR and LF.
(?<space>[\ \t\r\n]+)
\g<name>\g<space>?=\g<space>?
(?<attrval>
'[^']*' | "[^"]*"
)
)*
\g<space>?
>
)
(?<content>
[^<] # This is not quite technically correct, but is probably good enough
|
\g<element>
)*
(?<etag>
</ \k<name> \g<space>? >
)
|
(?<emptyelemtag>
< \g<name> \g<attr>* \g<space>? />
)
)
More information about the textmate
mailing list