2012-09-20 194 views
2

我基本上是試圖匹配10個字符ISBN結束,到目前爲止,我能夠匹配任何字符串,它是10個字符長,但是這是不準確的識別字符串一個ISBN匹配字符串,字符串

10字符長的ISBN可具有9起始位和一個字母結尾或有10位數字,例如

027373702X

如果最後一個字符是字母它總是會X

什麼我到目前爲止

[a-zA-Z0-9]{10,10} 

這個表達式就能從字符串中提取一個isbn,如

"asjdh - asd a - dsa- 0273737025" = 0273737025 

而且還會提取其他任何東西,是10個或更多字符長

"asjdh - asd a - dsa- myveryearly" = myveryearl 

是否有一個正則表達式,能滿足這些要求?

+0

「字符串」可以包含數字和其他字符。你應該指定「字母」或類似的東西,例如「如果最後一個字符是字母......」 –

+0

ISBN的有校驗位,你不必重新發明輪子這裏 – 2012-09-20 20:27:10

+0

@Dagon這已無關的問題 –

回答

3
\d{9}(?:\d|X) 

這是9位數字後跟一個數字或'X'。

1

這應該工作:

[0-9]{9}[xX0-9] 

還是比較簡潔的形式:

\d{9}[xX\d] 
0

你將不得不使用一個回顧後防止查找9個由多個數字分別是之前的數字。

(?<!\d)\d{9}[\dxX]