我想删除所有既不是下划线、连字符也不是字母数字的字符。此外,我不希望下划线或连字符作为第一个字符,因此也需要将其删除。
这似乎主要使用REGEXP_REPLACE和 LTRIM 工作:
SELECT LTRIM(
REGEXP_REPLACE(
'_-Hello(-)World)',
'[^-^_^a-z^A-Z^0-9]*',
''),
'_-') AS "result"
FROM dual;
这正确返回:
result
--------------------
Hello-World
但是,由于某种原因,当源字符串中有换行符时,这并不完全有效:
SELECT LTRIM(
REGEXP_REPLACE(
'_-Hello(-
)World)',
'[^-^_^a-z^A-Z^0-9]*',
''),
'_-') AS "result"
FROM dual;
这将返回“HelloWorld”,即没有连字符:
result
--------------------
HelloWorld
这个解决方案可能还有其他我忘记提及的问题。那么,有没有更好的方法来做我想做的事情?