XQuery中的特殊字符的正则表达式

时间:2013-09-21 07:27:25

标签: regex xquery

您好我是一名java开发人员,从最近几天开始我正在开发OSB。我需要从字符串中删除所有空格字符。为此我尝试了Assign块中的代码。

if(exists($Variable) and not(empty($Variable/text())))then 
fn:replace(fn:replace(fn:replace(fn:replace(
    fn:replace($Variable/text(),'[$`,:%!@#_-|]',''), 
    '[$?~@#!%:;=_+*]', ''), '[.]', ''), '[-]', ''), '[+= ?;]', '')
else 
    $Variable

但我想在一个Regex中做到这一点。所有这些字符都不在单个Regex字符串中。有没有办法在单个正则表达式字符串中执行此操作?

我找到了一个方法functx:escape-for-regex,但它无效。目前我正在使用Oracle 10g。

我想要这样的事情:

"[^\\w-]|[$_-]" //It works in Java

提前致谢。

1 个答案:

答案 0 :(得分:1)

正则表达式无需从黑名单中删除某些字符,只需使用translate(...)

translate($string, '-$`,:%!@#_|]$?~@#!%:;=_+*.-+= ?;', '')

但我没有清理角色列表。

正则表达式的问题在于列表中的短划线:[$`,:%!@#_-|]。此正则表达式阻止从_(字符95)到|(字符124)的所有字符。这包括所有小写字母!始终先使用短划线:[-$`,:%!@#_|]

无论如何:如果可能的话,最好使用白名单。你将永远忘记一些角色。大括号怎么样?