加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:49:09 所属栏目:百科 来源:网络整理
导读:我有以下 XML: ta_35345_0_234_345_666_888/t 我想用固定数字234替换“_”之后的第一个数字.所以结果应如下所示: ta_234_0_234_345_666_888/t 我尝试使用以下但它不起作用: xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transfor
我有以下 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读