2012-09-20 86 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]