我是正则表达的新手,在学习期间,我对某些基本内容感到困惑,请你解释一下这个表达式
查询
SELECT REGEXP_REPLACE('Having fun with', '([a-z])+', 'A') FROM dual;
结果:
HA A A
查询
SELECT REGEXP_REPLACE('Having fun with', '([a-z])*', 'A') FROM dual;
结果:
AHAA AA AA
根据这些查询及其结果,我无法理解+和*之间的主要区别。
答案 0 :(得分:7)
+ - 匹配1个或多个小写字母。防爆。括号中的匹配项:H [aving] [fun] [with]
* - 匹配0个或更多小写字母。例如:括号中的匹配(也是空字符串):[] H [aving] [] [fun] [] [with] []
答案 1 :(得分:2)
并非所有正则表达式引擎都以这种方式工作,但 Oracle正则表达式引擎将允许空匹配遵循非0宽度的匹配。但是,所有正则表达式引擎应在字符串的开头匹配。
'noignorecase'
,:s/[a-z]*/A/g
==> AHA A A
。my $in = 'Having fun with'; $in =~ s/[a-z]*/A/g;
==> AHAA AA AA
。 *
贪婪,会尝试匹配尽可能多的项目,就像+
一样,但*
允许0次匹配(即空字符串)。
机器状态为:
H
不匹配。aving
)。<space>
的匹配。fun
)<space>
的匹配。with
)