[英]Regular expression return escaped char
是否可以使用正则表达式转义一组字符。
一个例子:
Input: name!surname
Output: name\!surname
这个想法是转义所有非字母数字字符,我知道如何编写正则表达式来找到它们,但真的很难逃脱。
使用 Oracle 的 SQL 和REGEXP_REPLACE()
:
SELECT regexp_replace('name!surname?', '[^a-zA-Z\d\s:]', '#') from sys.dual;
output 看起来像name#surname#
但我想知道是否有可能得到类似name\?surname\?
.
我需要转义 Oracle Text 的所有非字母数字字符以解析查询。
我不能使用 {} 进行多重转义,因为它不适用于通配符 %。
您可以在\1
之前使用双反斜杠作为第三个参数,以及[^[:alnum:]]
posix (右括号和括号之前的[:space:]
posix 是由于摆脱了用空格替换的反斜杠) :
select regexp_replace('name!surname','([^[:alnum:][:space:]])','\\\1')
from dual
将您尝试匹配的字符组包装在捕获组中,然后使用\\\1
作为替换。 \\
是一个转义的反斜杠, \1
将插入第一个捕获组的内容:
SELECT regexp_replace('name! surname?', '([^a-zA-Z0-9[:space:]:])', '\\\1')
AS replacement
from sys.dual;
输出:
| 更换 | |:-------------- | | 名字姓\? |
db<> 在这里摆弄
利用
SELECT REGEXP_REPLACE('name!surname','([[:punct:]])','\\\1') from dual
看在线demo ,结果:
模式是([[:punct:]])
,一个匹配单个标点符号或符号字符的单个捕获组。 替换是反斜杠 + 组值。
请注意,替换模式中的\
是一个特殊字符,它用于引入占位符,替换反向引用,因此,它应该自行转义以在结果字符串中生成文字反斜杠。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.