HPCC ECL正则表达式环视背到回值

问题描述:

我使用正则表达式库这里http://userguide.icu-project.org/strings/regexpHPCC ECL正则表达式环视背到回值

定义的话虽这么说,我有一个具体的问题,我想用正则表达式来纠正。

Input := '!Tim !~ Dan~'; 
Output := Tim !~ Dan 

REGEXREPLACE('((?<![!])~)' ,Input,' '); //Results in : !Tim !~ Dan 
REGEXREPLACE('((?![~])!)|((?<![!])~)',Input,' '); //Results in : Tim ~ Dan 

这句话是什么造成的!以下〜被删除?

如何删除所有!并且〜在单个Regex命令中不删除!〜的组合。

红利点如果你能告诉我如何做!〜!在一个命令中工作。

谢谢!

您可以使用以下正则表达式:

(!~)|[!~] 

$1逆向引用替换。请参阅regex demo

详细

  • (!~) - 匹配并捕获到组1一个!~序列字符
  • | - 或
  • [!~] - 单个!~字符

$1反向引用将存储在组1中的值重新插入结果字符串中。

+0

所以这基本上是说用组件1中的任何内容替换它自己以及任何组外的任何东西,用空字符串。我原以为$ 1会替换字符集的每个实例。为什么不是这种情况? –

+0

'$ 1'是[*编号的反向引用*](http://www.regular-expressions.info/replacebackref.html)。它指的是在模式中用相应的捕获组捕获的文本。 A [*捕捉组*](http://www.regular-expressions.info/brackets.html)是模式内的一对未转义的括号。 –

+0

好的,别人值得注意的是(!〜)| [!〜]不能被其他方式引用,否则在找到该组之前替换该组中的字符。 –