匹配以9位开头并可能以字符串结尾的字符串

时间:2012-09-20 20:22:06

标签: php regex

我基本上尝试匹配10个字符的ISBN,到目前为止,我能够匹配任何长度为10个字符的字符串,但是将字符串标识为ISBN

是不准确的

10个字符长的isbn可以有9个起始数字,以字母结尾或有10个数字, 例如

0273737025

027373702X

如果最终字符是字母,则始终为X

到目前为止我所拥有的

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

这个正则表达式将能够从像

这样的字符串中提取isbn
"asjdh - asd a -  dsa- 0273737025"  = 0273737025

但也会提取任何长度为10个或更多字符的内容

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

是否有正则表达式可以满足这些要求?

3 个答案:

答案 0 :(得分:3)

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

这是9位数,后跟数字或'X'。

答案 1 :(得分:1)

这应该有效:

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

或者更简洁的形式:

\d{9}[xX\d]

答案 2 :(得分:0)

您必须使用lookbehind来防止找到前面有更多数字的9位数字。

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