0

嗨,我是一名 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

但我想在一个正则表达式中做到这一点。所有这些字符都不适用于单个正则表达式字符串。有没有办法在单个正则表达式字符串中做到这一点?

我找到了一种方法functx:escape-for-regex,但它不起作用。目前我正在使用 Oracle 10g。

我想要这样的东西:

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

提前致谢。

4

1 回答 1

1

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

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

不过,我没有清理角色列表。

您的正则表达式的问题是列表中的破折号:[$`,:%!@#_-|]. 此正则表达式阻止从_(字符 95)到|(字符 124)的所有字符。这包括所有小写字母!总是把破折号放在第一位:[-$`,:%!@#_|].

无论如何:如果可能,最好使用白名单。你总是会忘记一些字符。大括号呢?

于 2013-09-21T08:39:58.753 回答