Добавьте :
после (?
, чтобы предотвратить ссылку на паратезис:
/[\W"]*(?:"<name>".*?)[\"]*?\s*[<\(]?(?:"<email>"\S+@[^\s>)]+)[>)]?/
Я придумал http://xsltransform.net/jyH9rMo , который просто делает
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<hmtl>
<head>
<title>New Version!</title>
</head>
<xsl:apply-templates/>
</hmtl>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:analyze-string select="." regex="([ऀ-ॿ]+)((\s+[ऀ-ॿ]+)*)">
<xsl:matching-substring>
<span xml:lang="hi-Deva"><xsl:value-of select="."/></span>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:transform>
Это должно работать (некоторые комментарии после кода):
XSLT 2.0
<xsl:analyze-string select="$textValue" regex="([ऀ-ॿ]+)((\s+[ऀ-ॿ]+)*)">
<xsl:matching-substring>
<span xml:lang="hi-Deva"><xsl:value-of select="regex-group(1)"/><xsl:value-of select="regex-group(2)"/></span>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
matching-substring
помещает span
вокруг текста хинди non-matching-substring
только возвращает немодифицированную «нормальную» текстовую подстроку (вы возвращали весь текст!) [/ g2] В дополнение к предыдущим ответам вы можете заметить, что вместо [ऀ-ॿ]
\p{IsDevanagari}