给定字符串,例如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数据库中创建这个,如果我找到没有程序处理的解决方案(一种模式),那就太酷了。
答案 0 :(得分:2)
以下可以使用捕获组而不是断言来执行此操作:
$str = "helloababblolobbbabf";
^^^^ ^^
echo preg_replace("#.*?(ab|$)#", "$1", $str);
// Output: ababab
由于您说您实际在Oracle工作,因此可以使用REGEXP_REPLACE
:
REGEXP_REPLACE(input, '.*?(ab|$)', '\1')
答案 1 :(得分:1)
您需要使用的表达式为:
((?<=ab|^).*?(?=ab|$))
从字符串中返回abbbabfasdfsdfsdfab
ababab
。
查看实际操作:http://regex101.com/r/nT8mC1
巴特在评论中指出, 警告,Oracle没有实施太多的PCRE标准,因此这根本行不通。您必须考虑实现某种类型的捕获集,您可以捕获所需的字符串,并使用implode
重建它(您显然不希望这样做)。< / p>
编辑为评论中的条件添加了建议。