作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码:
#!/usr/bin/perl
use warnings;
use strict;
my $SourceStr='Foo - Name: Rob Time: 11/2/2011 13:47:30 State: Prelim 3 Optional: Some stuff here';
#my $SourceStr='Foo - Name: Rob Time: 11/2/2011 13:47:30 State: Prelim 3';
my $RegEx = qr/Name: (.+) Time: (.+) State: (.+) Optional: (.+?)( |$)/;
if ($SourceStr =~ m/$RegEx/) {
print "1=[$1]\n";
print "2=[$2]\n";
print "3=[$3]\n";
print "4=[$4]\n";
}
当使用第一个 $SourceStr 运行时,它按预期工作。但是,对于第二个被注释掉的,有没有办法让 $4 填充空字符串?
第一个字符串结果:
1=[Rob]
2=[11/2/2011 1:47:30 PM]
3=[3]
4=[Some stuff here]
第二个字符串结果:不匹配
想要:
1=[Rob]
2=[11/2/2011 1:47:30 PM]
3=[3]
4=[]
最佳答案
您可以使用更具体的正则表达式:
#!/usr/bin/perl
use warnings;
use strict;
my @SourceStrA=('Foo - Name: Rob Time: 11/2/2011 13:47:30 State: 3 Optional: Some stuff here',
'Foo - Name: Rob Time: 11/2/2011 13:47:30 State: 3');
my $RegEx = qr!Name:\s*(\w+)\s*Time:\s*([\d/]*\s*[\d:]*)\s*State:\s*(\d+)\s*(?:Optional:\s*(.*))?!;
for my $SourceStr (@SourceStrA) {
print "$SourceStr\n";
if ($SourceStr =~ m/$RegEx/) {
print "1=[$1]\n";
print "2=[$2]\n";
print "3=[$3]\n";
print "4=[$4]\n" if defined $4;
}
}
输出:
Foo - Name: Rob Time: 11/2/2011 13:47:30 State: 3 Optional: Some stuff here
1=[Rob]
2=[11/2/2011 13:47:30]
3=[3]
4=[Some stuff here]
Foo - Name: Rob Time: 11/2/2011 13:47:30 State: 3
1=[Rob]
2=[11/2/2011 13:47:30]
3=[3]
关于regex - 仅当模式存在时才匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14165648/
我有 json 数据: { "products": [ { "productId" : 0, "productImg" : "../img/product-ph
我是一名优秀的程序员,十分优秀!