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中的值重新插入结果字符串中。
所以这基本上是说用组件1中的任何内容替换它自己以及任何组外的任何东西,用空字符串。我原以为$ 1会替换字符集的每个实例。为什么不是这种情况? –
'$ 1'是[*编号的反向引用*](http://www.regular-expressions.info/replacebackref.html)。它指的是在模式中用相应的捕获组捕获的文本。 A [*捕捉组*](http://www.regular-expressions.info/brackets.html)是模式内的一对未转义的括号。 –
好的,别人值得注意的是(!〜)| [!〜]不能被其他方式引用,否则在找到该组之前替换该组中的字符。 –