2013-10-31 82 views
1

中的多個問號匹配我在perl中使用正則表達式解決了一個奇怪的問題。Perl擴展正則表達式 - 與

考慮琴絃 -

abcdef00000

blaDeF002500456 

wefdEF120045423 

所有這些字符串與下面的正則表達式時,我用C試圖與PCRE庫支持配套:

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

但我無法實現在Perl代碼中相同。我收到了一些奇怪的錯誤。

請幫助一下這兩件事情匹配的Perl代碼。

預先感謝...

+0

你會得到什麼錯誤?你能告訴我們一些代碼嗎? –

+0

嗨devnull, 感謝您的答覆。 替換?與。對我來說工作正常(根據所提到的正則表達式的期望)。 –

回答

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和regex弄糊塗了。

+0

嗨anubhava, 感謝您的幫助。 替換?與。按預期工作。但很想知道pcre圖書館如何對待他們。會檢查它。 –

+0

不客氣,如果您對答案滿意,請不要忘記標記已接受的商標。正如我寫的PCRE不會單獨接受'?'。 – anubhava

2

這看起來更像是一個文件系統正則表達式,而不是PCRE。在Perl中,?是一個量詞,而不是通配符。您可能需要用.替換它們以獲得與任何Perl兼容的相同結果。

我可能會用...[dD][eE][fF][0-9]{9}甚至用\d代替[0-9]

0

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

應該是用於驗證所提到的字符串Perl Regex對象。

Regards