繁体   English   中英

正则表达式返回转义字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM