正则表达式 – XSLT 2.0正则表达式替换

前端之家收集整理的这篇文章主要介绍了正则表达式 – XSLT 2.0正则表达式替换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下 XML

<t>a_35345_0_234_345_666_888</t>

我想用固定数字234替换“_”之后的第一个数字.所以结果应如下所示:

<t>a_234_0_234_345_666_888</t>

我尝试使用以下但它不起作用:

<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xsl:template match="/">
     <xsl:value-of select='replace(.,"(.*)_\d+_(.*)","$1_234_$2")'/>
   </xsl:template>
</xsl:stylesheet>

UPDATE

以下适用于我(感谢@ Chris85).只需删除下划线并添加“?”以使其不贪婪.

<xsl:stylesheet version="2.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xsl:template match="/">
    <xsl:value-of select='replace(.,"(.*?)_\d+(.*)","$1_234$2")'/>

   </xsl:template>
 </xsl:stylesheet>

解决方法

你的正则表达式是/贪婪的.*消耗所有内容直到下一个字符的最后一次出现.

所以

(.*)_\d+_(.*)

放了

a_35345_0_234_345_666_

进入1美元.然后888被删除,没有任何东西进入2美元.

为了使它非贪婪添加一个?之后 .*.这告诉*在第一次出现下一个字符时停止.

功能示例:

<xsl:stylesheet version="2.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xsl:template match="/">
    <xsl:value-of select='replace(.,"$1_234$2")'/>
   </xsl:template>
 </xsl:stylesheet>

这里有一些关于重复和贪婪的文档,http://www.regular-expressions.info/repeat.html.

猜你在找的正则表达式相关文章