<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:re="regex-utils" version="2.0"> <xsl:function name="re:or" as="xs:string"> <xsl:param name="regexes" as="xs:string*"/> <xsl:choose> <xsl:when test="$regexes[1]"> <xsl:sequence select="concat('(', string-join($regexes, ')|('), ')')"/> </xsl:when> <xsl:otherwise> <xsl:sequence select="''"/> </xsl:otherwise> </xsl:choose> </xsl:function> <xsl:function name="re:exact" as="xs:string"> <xsl:param name="regex" as="xs:string"/> <xsl:sequence select="concat('^(', $regex, ')$')"/> </xsl:function> <xsl:function name="re:space-separated" as="xs:string"> <xsl:param name="regex" as="xs:string"/> <xsl:sequence select="concat('(',$regex,')(\s+(',$regex,'))*')"/> </xsl:function> <xsl:function name="re:comma-separated" as="xs:string"> <xsl:param name="regex" as="xs:string"/> <xsl:sequence select="concat('(',$regex,')(\s*,\s*(',$regex,'))*')"/> </xsl:function> <xsl:function name="re:or-groups" as="xs:integer"> <xsl:param name="groups" as="xs:integer*"/> <xsl:sequence select="sum($groups) + count($groups)"/> </xsl:function> <xsl:function name="re:space-separated-groups" as="xs:integer"> <xsl:param name="groups" as="xs:integer"/> <xsl:sequence select="3 + $groups + $groups"/> </xsl:function> <xsl:function name="re:comma-separated-groups" as="xs:integer"> <xsl:param name="groups" as="xs:integer"/> <xsl:sequence select="3 + $groups + $groups"/> </xsl:function> </xsl:stylesheet>