在Perl中匹配数字,非数字混合的字符串



>我有一个看起来像

No-mac4-two-git5a0r-m0-18md12b....

我试图将其匹配为/^D+d+D+dDdD+d+D+(d+)/但它不正确。我可以得到一些帮助吗?我只需要匹配字符串的这一部分,尽管还有更多内容,这就是为什么我在末尾使用"+"的原因。

进一步解释:

这些字符串是路径名的一部分。我正在尝试根据它们是否与正则表达式匹配来检索一些路径。所有路径都有一个字符串,其模式和格式与我上面显示的完全相同。不过,我无法以匹配的方式成功返回任何路径。

你说/^D+(?:d+D+)+(d+)/为你工作,所以你的问题是关于匹配字符串中的最后 1+ 位块。

答案在这里

(d+)(?!.*d)
(d+)D*z
.*(?:D|^)(d+)

证明:

if ("no-mac4-two-git5a0r-m0-18md12b...." =~ /(d+)(?=D*$)/) {
print "$1";
}
# => 12
if ("no-mac4-two-git5a0r-m0-18md12b...." =~ /(d+)D*z/) {
print "$1n";
}
# => 12
if ("no-mac4-two-git5a0r-m0-18md12b...." =~ /.*(?:D|^)(d+)/) {
print "$1";
}
# => 12

最新更新