Perl扩展正则表达式 - 匹配内部的多个问号

时间:2013-10-31 11:09:21

标签: regex perl

我使用正则表达式在perl中解决了一个奇怪的事情。

考虑字符串 -

abcdef000000123

blaDeF002500456

wefdEF120045423

当我使用pcre库支持在C中尝试时,所有这些字符串都与下面的正则表达式匹配:

???[dD][eE][fF][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]

但是我无法在perl代码中实现相同的功能。我收到了一些奇怪的错误。

请帮助处理这两个匹配的perl代码。

提前致谢...

3 个答案:

答案 0 :(得分:3)

?被称为量词,它使前面的模式或组成为可选匹配。在正则表达式中独立?没有任何意义,您收到的错误如下:Quantifier follows nothing in regex

以下正则表达式适用于perl:

...[dD][eE][fF][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]

或者更简洁的正则表达式:

.{3}[dD][eE][fF][0-9]{9}

每个点表示匹配任何字符。

PS:你可能会对shell的glob vs regex感到困惑。

答案 1 :(得分:2)

这看起来更像是文件系统正则表达而不是PCRE。在Perl中,?是量词,而不是外卡。您可能希望将它们替换为.,以便在Perl兼容的任何内容中获得相同的结果。

我可能会使用...[dD][eE][fF][0-9]{9}甚至将[0-9]替换为\d

答案 2 :(得分:0)

qr/[A-z]{3}def[0-9]{9}/i

应该是用于验证上述字符串的Perl Regex对象。

此致