在特定位置匹配正则表达式

时间:2012-07-02 13:56:37

标签: regex

是否可以使用单个正则表达式匹配字符串,我可以在文本中定义对其位置的约束?

例如,给定一个十六进制编码文件,我想匹配十六进制表示形式,这些十六进制表示形式对应于十六进制表示大于0x40的字符。位置约束应该是匹配应该从偶数位置开始。 例如。 034673911921应与467391匹配,但不能与92匹配。

3 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

^(?:..)*([4-9A-Fa-f][\da-fA-F])

将确保在捕获组之前有偶数个字符。

答案 1 :(得分:1)

您可以对正则表达式中的位置进行编码。对于你只在偶数位置开始的例子,这可能类似于

/^(?:..)*([4-9a-fA-F].)/

答案 2 :(得分:1)

可以通过两个易于理解的步骤完成:首先将其拆分为字段,然后检查大小。以下是sed的示例,我希望它会有所帮助:

echo 034673911921 | sed -nr 's7([0-9][0-9])/\1 /gp' | sed -n 's/[0-3][0-9]//gp'