output [15:0] pin;
output [1:0] en;
input [6:0] dddr;
input [6:0] dbg;
将其替换为
16 : pin : output;
2 : en : output;
7 : dddr : input;
7 : dbg :input;
我尝试了这个代码后,打开文件,并将其存储在var.,但我不能过滤它像上面
if ($var =~ /(\w+)\[(\d+)\:/) {
print "word=$1 number=$2\n";
}
//我正在尝试添加:在列的中间还
3条答案
按热度按时间aoyhnmkz1#
在模式中,单词字符后缺少空格。
这个问题很容易解决。将它添加到中间的模式中,如下所示:
这将产生:
为了得到您想要的输出,您将不得不细化模式,可能还需要做一些增量操作。
ygya80vv2#
您没有考虑
(\w+)
和正则表达式的(\d+)
部分之间的空格。输出这个
为了接近您的最终需求,可以扩展正则表达式以匹配您需要的其他部分,如下所示
输出此
不确定如何计算第一列的值。它似乎是数字字段+ 1。是否正确?
mnemlml83#
解析所示数据的一种方法
以下是一些评论。
在大多数正则表达式模式中,很大程度上取决于输入数据格式的细节,以及期望和允许的数据的灵活性。
\S+
匹配一个非空白字符串;假设开头有一个单词,可以包含任何非空格字符。如果可能有多个单词,则使用.+?
代替,它匹配所有到以下模式的第一个示例(这里是;
,所以更好的是,可以使用[^;]+
)\S
,因为没有告诉任何关于数据的内容。[]
内不允许有空格,只能是数字之间有:
。如果数据可以有空格,则使用\[\s*
和\s*\]
\S+
匹配,其中包含任何非空格字符。如果可能需要多个单词,则再次使用.+?
。如果该部分可能包含分号,则需要.+
,它包含 * 所有 * 内容,直到最后一个;
+
要求前面的模式至少出现一次。如果可以接受数据中的那个位置没有任何内容(例如,最后一个单词缺失),那么就使用量词*
代替,比如.*
因此,尽可能多地了解数据是什么样的,并仔细阐明要求,明确限制/允许什么是重要的。