0
我正在爲「標題大小寫」字符串例如「這是一個標題」,以「這是一個標題」。以下行不起作用,因爲正則表達式組引用丟失(或者我假設)。有沒有簡單的方法來大寫我的替換函數中的匹配字母?Xpath替換函數,處理匹配
replace($input, '\b[a-z]' , upper-case('$0'))
我正在爲「標題大小寫」字符串例如「這是一個標題」,以「這是一個標題」。以下行不起作用,因爲正則表達式組引用丟失(或者我假設)。有沒有簡單的方法來大寫我的替換函數中的匹配字母?Xpath替換函數,處理匹配
replace($input, '\b[a-z]' , upper-case('$0'))
\b
表達式不是XML Schema正則表達式的一部分。它被視爲字符b,所以你匹配b後跟另一個字符。
這裏您的替換字符串upper-case('$0')
只是$0
,所以您將自己替換字符。
您不能使用替換函數來執行此操作 - 您需要更多類似於XSLT中的xsl:analyze-string
,但這在XQuery 1.0中不可用。
據我所知,解決此問題的唯一方法是使用遞歸函數。如果您不需要保留分隔符,則可以使用使用標記化的更簡單的解決方案。
declare function local:title-case($arg as xs:string) as xs:string
{
if (string-length($arg) = 0)
then
""
else
let $first-word := tokenize($arg, "\s")[1]
let $first := substring($arg, 1, 1)
return
if (string-length($first-word) = 0)
then
concat($first, local:title-case(substring($arg, 2)))
else
if ($first-word = "a" (: or any other word that should not be capitalized :))
then
concat($first-word,
local:title-case(substring($arg, string-length($first-word) + 1)))
else
concat(upper-case($first),
substring($first-word, 2),
local:title-case(substring($arg, string-length($first-word) + 1)))
};
您還需要確保即使是像「一」短字每部影片的第一個字母大寫,但我將它作爲一個練習留給讀者。