今天早些时候,我需要一个实用函数来从文件中剥离一些数据,并编写了一个令人震惊的常规表达式来做到这一点。输入的是一个包含很多行的文件,其格式如下:
<address> <11 * ascii character value> <11 characters>
00C4F244 75 6C 74 73 3E 3C 43 75 72 72 65 ults><Curre我想去掉除结尾的11个字符之外的所有内容,并使用以下表达式:
"^[0-9A-F+]{8}[\\s]{2}[0-9A-F\\s]{34}"这与我不想要的部分匹配,然后我从原始字符串中删除了这些部分。我很想看看你是如何做到这一点的,但我不能工作的特定领域是:
1:让正则表达式引擎返回我想要的字符,而不是我不想要的字符
2:找到在后跟空格的单个ascii值上重复匹配的方法(例如"75“= 0-9A-F{2}\s{1}?)重复11次,而不是抓取34个字符。
再看一遍,最简单的事情是匹配到每一个输入行的最后11个字符,但这不是很灵活,为了学习正则表达式,我想看看如何从序列的开始进行匹配。
编辑:谢谢各位,这就是我想要的:
"(?:^[0-9A-F]{8} )(?:[0-9A-F]{2} ){11} (.*)"希望我能让你们中不止一个人变绿。
发布于 2009-02-24 14:57:53
1) ^0-9A-F+{8}\s{2}0-9A-F\s{34}(.*)
括号用于通过提取进行分组。如何检索它取决于您的语言上下文,但现在在初始模式之后设置了某种类型的$1。
2) ^0-9A-F+{8}\s{2}(?:0-9A-F\s){11}\s(.*)
(?:)是不带提取的分组。因此,(?:0-9A-F\s){ 11 }将那里的子模式视为一个单元,并重复查找11次。
顺便说一下,我假设PCRE在这里。
发布于 2009-02-24 14:56:13
由于文件具有固定的格式,因此您可以使用此正则表达式仅匹配最后11个字符。
^.{44}(.{11})发布于 2009-02-24 14:58:50
最后11个是:
...........$或者:
.{11}$匹配十六进制字节+空格并重复11次:
([0-9A-Fa-f]{2} ){11}https://stackoverflow.com/questions/582033
复制相似问题