regex - 如何映射多行(每行使用 perl 具有相同的格式
问题描述
我试图使用 perl 映射每一行内容,并且每一行都有相同的格式。
我已经成功地映射了第一行,但是一旦我在正则表达式之后添加 $,一切都会出错。但是,如果我删除 $,则 reguar 表达式只能匹配第一行而忽略其余部分
这里是内容
$bar ="0 qid:85 1:0.666667 2:0.666666 3:0.857143 #docid = 579
0 qid:85 1:0.666667 2:0.666666 3:0.857143 #docid = 579";
m/^([0-2])[\s]qid\:(\d+).*?\#docid[\s]=[\s](\d+)+$/
解决方案
- 您需要
/m
更改定义^
并$
满足您的需求。^
通常只匹配字符串的开头。与/m
, 它也在换行后匹配。$
通常仅在字符串末尾和字符串末尾的换行处匹配。使用/m
,它也匹配任何换行符。
- 您需要
/g
获取所有匹配项(而不仅仅是第一个匹配项)。 [\s]
是奇怪的写作方式\s
。(\d+)+
(最后)应该是(\d+)
。- 我在模式中添加了空格以提高可读性,这可以使用
/x
.
固定的:
while ( $bar =~ /^([0-2]) \s qid:(\d+) \s .*? \s \#docid \s = \s (\d+)$/mgx ) {
my ($foo, $qid, $docid) = ($1, $2, $3);
...
}
推荐阅读
- node.js - 使用我的应用程序登录名登录到我的 Gitlab CE 安装
- c++ - 让火飘起来
- django - Django:使用 get_or_create 和 unique_together 时出错
- html - CSS 如何将标题放在边框的前面?
- powershell - 根据名称移动文件(有额外的复杂性)
- mysql - 如何使用 Rails 功能解决 mysql 中的 Unicode 字符问题
- java - 如何使用 Pageable 对嵌入实体的属性进行排序?
- powershell - Powershell 导入-csv
- powershell - jenkins powershell 插件 url 编码
- angular - 防止无效的电子邮件/密码提示