如果存在,如何使用正则表达式替换忽略国家代码,我尝试使用
select REGEXP_REPLACE(phone_number,'^/(?:011.44.)([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})$',
'\1-\2-\3') regex_output
from employees;
但它不起作用,下一个适用于格式515.123.4567
'([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})$'
但他们有一些电话号码011.44.1345.729268
,如果可能的话,我想忽略 011.44 如果存在于数字的开头,使用一种正则表达式语法。
这应该是忽略语法,但它不起作用,^/(?:011.44.)
或者^/(?!011.44.)
我也^/(?!([[:digit:]]{3})\.([[:digit:]]{2})\.)
再次尝试不起作用注意我可以使用其他函数来做到这一点,这个问题仅与正则表达式有关,我正在使用 oracle HR 数据库
--------------------------------------------------
| original numbers | expected output |
--------------------------------------------------
| phone_number | regex_output |
--------------------------------------------------
| 515.123.4567 | 515-123-4567 |
| 515.123.4567 | 515-123-4567 |
| 515.123.4567 | 515-123-4567 |
| 515.123.4567 | 515-123-4567 |
| 011.44.1345.729268 | 134-572-9268 |
| 011.44.1345.729268 | 134-572-9268 |
| 011.44.1345.729268 | 134-572-9268 |
| 011.44.1345.729268 | 134-572-9268 |
--------------------------------------------------
更新:
如果其他人想知道我发现在 oracle中不支持非捕获组
(?:...),非捕获组,不支持,您应该将它们替换为捕获组。(请注意, (:? 不是非捕获组,它只是模式中第二个捕获组开头的可选冒号)。 -- Wiktor Stribiżew
我建议您在应用正则表达式之前对字符串进行规范化:
小提琴