HPCC ECL REGEX 环视背靠背值

Posted

技术标签:

【中文标题】HPCC ECL REGEX 环视背靠背值【英文标题】:HPCC ECL REGEX lookaround back-to-back values 【发布时间】:2016-07-28 21:47:03 【问题描述】:

我正在使用此处定义的 REGEX 库http://userguide.icu-project.org/strings/regexp

话虽如此,我有一个具体问题想使用正则表达式来纠正。

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

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

这个语句是怎么导致的!后面的~要去掉?

如何全部删除!和 ~ 不删除 !~ 在单个正则表达式命令中的组合。

如果您能告诉我如何制作,可以获得奖励积分!~!在一个命令中工作。

谢谢!!

【问题讨论】:

【参考方案1】:

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

(!~)|[!~]

并替换为$1 反向引用。请参阅regex demo。

详情

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

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

【讨论】:

所以这基本上表示将组 1 内的任何内容替换为自身,并将组外的任何内容替换为空字符串。我原以为 $1 会替换字符集的每个实例。为什么不是这样? $1numbered backreference。它是指在模式中使用相应的捕获组捕获的文本。 capturing group 是模式中的一对非转义括号。 好的,对于其他人来说值得注意的是, (!~)|[!~] 不能反过来引用,否则在找到 Group 之前,集合中的字符会被替换。跨度>

以上是关于HPCC ECL REGEX 环视背靠背值的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有环视的情况下在 RegEx 中捕获“搜索”而不是“/搜索”?

正则表达式:比赛之前/之后的环视

正则表达式 - 使用否定环视匹配同句中的单词

正则表达式环视

正则基础之 环视

正则表达式的环视和匹配