У меня есть следующий XML:XSLT 2.0 регулярное выражение заменить
<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>
UPD ATE
Следующие работы для меня (спасибо @ 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>
Что происходит в настоящее время? Я думаю, вам нужно сделать это не жадным '. *?'. например ' ' –
chris85
Привет @ Chris85 - спасибо, что сработало! Можно ли изменить выражение так, чтобы в конце использовалась граница слова вместо «_»? Обычная граница слова (\ b) не поддерживается в XSLT. Я использую XSLT 2.0. Спасибо! –
Я не уверен, что я не работаю с XSLT часто (раз в год или меньше). Я чаще работаю с регулярными выражениями, могу ли вы описать проблему, с которой вы сталкиваетесь, и, возможно, есть еще один подход к ней? – chris85