匹配除了每个给定组合之外的所

时间:2013-12-09 20:51:25

标签: regex oracle

给定字符串,例如abbbabf

给定的片段,例如ab

需要删除所有来自abbbabf的所有字符,但必须获得结果:abab

应该如何使用正则表达式?

修改

让我们以php为例

它只是删除除了棋子之外的所有内容,如果棋子只是一个符号,那就是棋子是a,必须这样做

$str = "abbbabf"; 
echo preg_replace("#[^a]#", "", $str); 

,结果为aa

但是当作品不止一个符号时如何制作这个,我不知道......

请不要提供以下解决方案:

preg_match_all("#ab#", $str, $a);
echo implode($a[0]);  

由于

PS。我需要在ORACLE数据库中创建这个,如果我找到没有程序处理的解决方案(一种模式),那就太酷了。

2 个答案:

答案 0 :(得分:2)

以下可以使用捕获组而不是断言来执行此操作:

$str = "helloababblolobbbabf";
             ^^^^        ^^ 
echo preg_replace("#.*?(ab|$)#", "$1", $str); 

// Output: ababab

RegExr

由于您说您实际在Oracle工作,因此可以使用REGEXP_REPLACE

REGEXP_REPLACE(input, '.*?(ab|$)', '\1')

SQLFiddle

答案 1 :(得分:1)

您需要使用的表达式为:

((?<=ab|^).*?(?=ab|$))

从字符串中返回abbbabfasdfsdfsdfab ababab

查看实际操作:http://regex101.com/r/nT8mC1

巴特在评论中指出,

警告,Oracle没有实施太多的PCRE标准,因此这根本行不通。您必须考虑实现某种类型的捕获集,您可以捕获所需的字符串,并使用implode重建它(您显然不希望这样做)。< / p>

编辑为评论中的条件添加了建议。