正则表达式可以做基本算术吗?

时间:2016-07-03 14:05:04

标签: regex math pcre

这是一个相对简单的问题。 PCRE(没有扩展功能,例如能够调用主机功能)可以进行基本算术吗?也就是说,我可以使用PCRE对一元非负整数进行加,减,除和乘以?如果是这样,怎么样? (注意:我可以控制输入,正则表达式和替换字符串)

1 个答案:

答案 0 :(得分:5)

是的,你可以。通过使用一元数,即数字只是字符串的长度。这类似于regexes can check for prime numbers(PowerShell中的示例),因为大部分内容都是如此基本,以至于每个引擎都应该能够执行此操作。)

加成

$^替换为要添加的长度字符串。

'XXXXX' -replace '^', 'XXX' = XXXXXXXX  # 5 + 3

减法

.{n}$替换为n作为要减去的数字。

'XXXXX' -replace '.{3}$', '' = XX       # 5 - 3

乘法

.替换为要乘以的长度字符串。

'XX' -replace '.', 'XXX' = XXXXXX       # 2 * 3

\G.{n}(?=(.{n})*$)替换为长度为1的字符串; n是除以的数量。如果无法替换,则字符串不会更改。

'XXXXXX' -replace '\G.{3}(?=(.{3})*$)', 'X' = XX      # 6 / 3
'XXXXXX' -replace '\G.{4}(?=(.{4})*$)', 'X' = XXXXXX  # 6 / 4 (!)

话虽如此,关于这个问题的评论者是正确的:如果你能提供帮助,你真的不应该这样做(好奇心很好)。