regex 用于位模式或二进制数据的正则表达式?

fcy6dtqo  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(79)

出于好奇,有没有一种方法可以在 bit 级别上进行模式匹配?目前我见过的所有regex系统都是基于 bytecharacter 的表示,但我还没有见过任何可以让你在bit级别上匹配的系统。
例如,如果我有一个像这样的 bit 字段:

011101100011100110110001

字符串
(24bits!)我可以检查第7、8和9位是模式100吗?
语言不可知论的答案是可取的,但我知道没有地方这样做,我会感谢任何见解。
注意事项:我希望在任意数量的 * 位 * 上执行此操作,因此转换为 * 字节 *(或填充为 * 字节 * 大小)并应用卷积的正常正则表达式不是我想要的!
谢谢你,

ztigrdn8

ztigrdn81#

当然,没有理论上的限制使它成为不可能。事实上,相关的理论可以适用于任何字母表,例子经常使用相当小的字母表,尽管通常不是由符号0和1组成的字母表。你可能想读一本关于计算理论的书。

vdgimpew

vdgimpew2#

假设你试图检查的是实际的位,而不是一个1和0的字符串,我不相信你能用正则表达式本身做到这一点,但你可以应用一个位掩码来检查某些位的状态。例如,检查LMB是1:

第一个月

10000000
= 10000000

z6psavjg

z6psavjg3#

有没有办法在比特级进行模式匹配?

当然有一种方法,并且已经被广泛使用。只要看看正则表达式模式,检查字节串是否表示有效的utf-8编码的Unicode文本。
是这样的:
让我们假设位流由ASCII字符的字节串给出,值为hex: 00-FF(dec:0-255),您正在搜索位模式bin: 00111111的出现,即hex: 3F(dec:77)。
对于能够跨字节边界在字符串中找到此位模式的正则表达式,解决方案是搜索提供此位模式的字节对。
要实现这一点,您需要定义正则表达式模式必须搜索的所有适当的两个字符长的组合。
让我们在这里只展示其中的一部分来给予一个例子:
替代项链中的第一个正则表达式模式:

\0x3F

字符串
替代项链中的第二个正则表达式模式:

[\x1F\x9F][\x80-\xFF]


..
生成的正则表达式如下所示:(\x3F)|([\x1F\x9F][\x80-\xFF])| ...

相关问题